Cómo crear un reproductor de video personalizado

Reproductor de video personalizado con HTML, CSS y JavaScript

El desarrollo web moderno nos permite personalizar casi cualquier cosa, desde formularios hasta reproductores de video. En este artículo, explicaré paso a paso como crear un reproductor de video personalizado usando HTML, CSS y JavaScript.

Para el ejemplo utilizaremos FontAwesome para los iconos de los controles, creando un diseño moderno y funcional. De la misma forma es posible utilizar iconos o imágenes personalizadas o armadas especialmente para crear un diseño específico. Esto es una opción y cada uno podrá elegir los iconos que prefiera para crear este componente.

En la explicación, comenzaré con la parte de HTML. Seguido, iremos a los estilos. Para finalizar, veremos com usar JavaScript para las funcionalidades.

Estructura del reproductor en HTML

Comenzaremos con la estructura básica en HTML. Usaremos la etiqueta <video> para el contenido multimedia y añadiremos los controles personalizados como botones fuera de ella.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reproductor de Video Personalizado</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <link rel="stylesheet" href="css/estilos.css">
</head>
<body>
    <div class="video-container">
        <video id="video" width="600" height="400" src="media/video.mp4"></video>
        <div class="controls">
            <button id="play-pause" class="control-btn">
                <i class="fa fa-play"></i>
            </button>
            <input type="range" id="progress-bar" value="0" max="100" class="progress-bar">
            <button id="mute" class="control-btn">
                <i class="fa fa-volume-up"></i>
            </button>
            <input type="range" id="volume-bar" value="100" max="100" class="volume-bar">
            <button id="fullscreen" class="control-btn">
                <i class="fa fa-expand"></i>
            </button>
        </div>
    </div>
    <script src="js/script.js"></script>
</body>
</html>

En este código, tenemos un contenedor de video con los controles de reproducción, volumen, barra de progreso y un botón de pantalla completa. Utilizamos FontAwesome (desde un CDN) para agregar iconos representativos como los de reproducción, volumen y pantalla completa.

El div cuya clase es controls, contiene los controles personalizados del reproductor de video. Los estilos serán establecidos desde CSS y por medio de JavaScript podremos especificar las funcionalidades.

Algunas aclaraciones:

  • Debemos crear una carpeta llamada css y ubicar el archivo estilos.css dentro
  • También deberemos crear la carpeta js e incorporar script.js en esa ubicación.
  • En la carpeta media se ubica el archivo de video. Para este caso es un MP4 con el nombre video.mp4.

Estilos en CSS

Ahora vamos a personalizar la apariencia del reproductor de video con CSS. A continuación, te muestro el archivo estilos.css:

.video-container {
    position: relative;
    width: 600px;
    max-width: 100%;
}

video {
    width: 100%;
    height: auto;
    display: block;
}

.controls {
    position: absolute;
    bottom: 10px;
    left: 10px;
    right: 10px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: rgba(0, 0, 0, 0.5);
    padding: 10px;
    border-radius: 5px;
}

.control-btn {
    background: none;
    border: none;
    color: white;
    font-size: 20px;
    cursor: pointer;
}

.progress-bar, .volume-bar {
    -webkit-appearance: none;
    height: 5px;
    border-radius: 5px;
    background-color: #ddd;
    cursor: pointer;
}

.progress-bar {
    width: 60%;
    margin: 0 15px;
}

.volume-bar {
    width: 80px;
}

.progress-bar::-webkit-slider-thumb, .volume-bar::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 15px;
    height: 15px;
    background: #000;
    border-radius: 50%;
    cursor: pointer;
}

Este código CSS estiliza el reproductor de video y sus controles. Los botones están alineados en una barra transparente en la parte inferior del video. También personalizamos las barras de progreso y volumen para que se ajusten a la apariencia general.

Para este caso elegí un estilo minimalista con colores simples. Me basé en una paleta blanco y negro, con transparencias. El estilo se puede adaptar a cualquier paleta de colores, ajustando las propiedades color y background de los elementos.

Funcionalidad en JavaScript

Ahora implementaremos la lógica de los controles con JavaScript. El siguiente código debe colocarse en el archivo script.js:

const video = document.getElementById('video');
const playPauseBtn = document.getElementById('play-pause');
const muteBtn = document.getElementById('mute');
const progressBar = document.getElementById('progress-bar');
const volumeBar = document.getElementById('volume-bar');
const fullscreenBtn = document.getElementById('fullscreen');

// Reproducir o pausar el video
playPauseBtn.addEventListener('click', () => {
    if (video.paused || video.ended) {
        video.play();
        playPauseBtn.innerHTML = '<i class="fa fa-pause"></i>';
    } else {
        video.pause();
        playPauseBtn.innerHTML = '<i class="fa fa-play"></i>';
    }
});

// Actualizar barra de progreso
video.addEventListener('timeupdate', () => {
    const percentage = (video.currentTime / video.duration) * 100;
    progressBar.value = percentage;
});

// Saltar en el video cuando se arrastra la barra de progreso
progressBar.addEventListener('input', () => {
    const time = (progressBar.value / 100) * video.duration;
    video.currentTime = time;
});

// Silenciar o activar sonido
muteBtn.addEventListener('click', () => {
    video.muted = !video.muted;
    muteBtn.innerHTML = video.muted ? '<i class="fa fa-volume-mute"></i>' : '<i class="fa fa-volume-up"></i>';
});

// Controlar volumen
volumeBar.addEventListener('input', () => {
    video.volume = volumeBar.value / 100;
});

// Pantalla completa
fullscreenBtn.addEventListener('click', () => {
    if (video.requestFullscreen) {
        video.requestFullscreen();
    } else if (video.mozRequestFullScreen) {
        video.mozRequestFullScreen();
    } else if (video.webkitRequestFullscreen) {
        video.webkitRequestFullscreen();
    } else if (video.msRequestFullscreen) {
        video.msRequestFullscreen();
    }
});

Explicación del código:

  1. Reproducción/Pausa: el botón de reproducción/pausa cambia según el estado del video. Si el video está en pausa o ha terminado, se reproduce; de lo contrario, se pausa.
  2. Barra de progreso: a medida que el video avanza, la barra de progreso se actualiza para reflejar el tiempo transcurrido. También permite al usuario avanzar o retroceder en el video.
  3. Control de volumen: se puede ajustar el volumen del video con la barra de volumen. También añadimos la funcionalidad para silenciar y activar el sonido.
  4. Pantalla completa: el botón de pantalla completa expande el video a pantalla completa utilizando el método requestFullscreen() compatible con los principales navegadores modernos.

A continuación veremos la previsualización del reproductor con un video de ejemplo:

En conclusión

Con este reproductor de video personalizado, hemos aprendido cómo integrar HTML, CSS y JavaScript para crear una experiencia visual minimalista y funcional. Además, al usar FontAwesome, le añadimos un toque moderno y personalizado a los controles.

Este tipo de desarrollo te permite ofrecer una experiencia más personalizada a los usuarios de tu sitio web, mejorando la interacción y el diseño

Si te interesa saber más sobre HTML, CSS y JavaScript, déjame un comentario o escríbeme un mensaje.

Más sobre Diseño y desarrollo Web


Acerca de

Autor de los libros: Webmaster Profesional, HTML5: Comprenda el cambio y Apps HTML5 para móviles. Soy especialista en Desarrollo Web. Realizo proyectos basados en Inteligencia Artificial. Colaboré como autor y editor de contenidos para revistas, colecciones y diversos medios impresos y digitales. Brindo capacitaciones, clases de formación y consultorías sobre lenguajes de programación y herramientas para Desarrollo Web y móvil en modalidad online y presencial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*