
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:
- 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.
- 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.
- 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.
- 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.
