Sin embargo a veces necesitamos hacerlo, así que ¿qué tal si los tenemos todos a la vista pero sólo cargamos uno de inicio? Imagino que algo ganaremos.
Pues esa es más o menos la principal utilidad del cacharrito que veremos hoy. La otra será no llenar toda la página de vídeos y como complemento también le daremos un toque personal al conjunto.
La idea básica es usar una simple línea JavaScript que irá sustituyendo a demanda (con un clic en una miniatura) un vídeo por otro, cargando el que se desea ver y sólo ese. Para ello usaremos un HTML concreto y con algo de CSS haremos el resto. En fin, allá vamos con este...
En primer lugar tendremos que utilizar la siguiente estructura HTML, que se podrá poner indistintamente en una entrada, en una página o en un gadget. En ella lo único que hay que cambiar es lo marcado con un color distinto y que es el código de cada vídeo.
Ese código hay que repetirlo dos veces en cada enlace de los del principio. Uno será para pasar esa id del vídeo a la rutina JavaScript que lo cargará y la otra para que se muestre la correspondiente miniatura.
El del primer vídeo hay que repetirlo más adelante una tercera vez. Eso es para que salga de inicio. Será el único que realmente cargaremos de primeras.
La identificación de cada vídeo la podéis encontrar en YouTube en la propia dirección URL. Sería en este ejemplo ese alfanumérico de 11 caracteres que hay al final, tras el símbolo igual (=): https://www.youtube.com/watch?v=jCOUeqgYoLM.
Opcional: Incluir el título del vídeo con un div dentro del enlace.
<div class="yt-general"> <div class="yt-miniaturas"> <!-- INCLUIR LA ID DE CADA VIDEO 2 VECES EN CADA ENLACE: UNO PARA ORDENAR LA CARGA Y OTRO PARA LA MINIATURA --> <a href="javascript:cargarVideo('id-frame','RnoDb0bMQuk');"><img src="http://img.youtube.com/vi/RnoDb0bMQuk/1.jpg" /><div>1956 - That's amore</div></a> <a href="javascript:cargarVideo('id-frame','7IjgZGhHrYY');"><img src="http://img.youtube.com/vi/7IjgZGhHrYY/1.jpg" /><div>1957 - Great balls of fire</div></a> <a href="javascript:cargarVideo('id-frame','noE1u3Xu6Vg');"><img src="http://img.youtube.com/vi/noE1u3Xu6Vg/1.jpg" /><div>1956 - Don't be cruel</div></a> <a href="javascript:cargarVideo('id-frame','ty31QY5ZGHo');"><img src="http://img.youtube.com/vi/ty31QY5ZGHo/1.jpg" /><div>1957 - Everyday</div></a> <a href="javascript:cargarVideo('id-frame','u0yGXKoA6Ek');"><img src="http://img.youtube.com/vi/u0yGXKoA6Ek/1.jpg" /><div>1958 - Johnny .Goode</div></a> </div> <div class="yt-cargador"> <div id="yt-video" class="yt-video"> <!-- ESCRIBIR DE NUEVO EL CÓDIGO DEL PRIMER VIDEO --> <iframe id="id-frame" width="420" height="315" src="https://www.youtube.com/embed/RnoDb0bMQuk?rel=0" frameborder="0" allowfullscreen></iframe> </div> </div> </div> <script>function cargarVideo(idframe, idvideo) {document.getElementById(idframe).src = 'https://www.youtube.com/embed/' + idvideo + '?rel=0';}</script>
Aquí, justo arriba, al final del HTML, he añadido directamente el JavaScript. Como es muy corto ni merece la pena meterlo en la plantilla, pero también se podría incluir si se quiere antes del </head>. De esa manera ya no habría que incluirlo cada vez que usemos este sistema en una entrada/página.
Habréis visto que es una tontería, pero funciona estupendamente. Cuando se pincha en la miniatura, se manda a la función cargarVideo una id HTML que se corresponde con la del iframe del primer vídeo (id-frame) y la id del vídeo a cargar (RnoDb0bMQuk... o la que corresponda). Luego la función sustituye ese último código y listo, ya tenemos otro vídeo en lugar del primero.
Y como HTML sin CSS casi que no es nada, sólo nos faltará añadir en nuestra plantilla lo que va después de esta demo para que todo se quede más mono. Pinchad en las miniaturas para comprobar como se produce la sustitución.
1956 - That's amore
1957 - Great balls of fire
1956 - Don't be cruel
1957 - Everyday
1958 - Johnny B.Goode
/* Estilo cargador de vídeos */
.yt-general {padding: 10px;box-sizing: border-box;text-align: center;line-height: 0;font-size: 0;}
.yt-cargador {width: 1000px;max-width: 100%;margin: 0 auto;padding: 4%;background: #333;border-radius: 0 0 8px 8px;box-sizing: border-box;box-shadow: 0 0 10px #000 inset, 0px 0 25px #666 inset;}
.yt-video{position: relative;max-width: 100%;padding-bottom: 56.25%;height: 0;overflow: hidden;background: #000;}
.yt-video iframe,.yt-video object,.yt-video embed {width: 1600px;max-width: 100%;height: 100%;position: absolute;top: 0;left: 0;}
.yt-miniaturas {width: 1000px;max-width: 100%;margin: 0 auto;padding: 1% 4% 2%;background: #333;box-sizing: border-box;border-radius: 8px 8px 0 0;box-shadow: 0 0 10px #000 inset, 0px 0 25px #666 inset;}
.yt-miniaturas a {position: relative;display: inline-block;width: 20%;height: 0;overflow: hidden;padding: 0 0 13% 0;vertical-align:top;margin: 1% 0 0;border: 2px solid #333;box-sizing: border-box;transition: .3s all;}
.yt-miniaturas a:hover {z-index: 2;transform: scale(1.2);}
.yt-miniaturas a img {width: 100%;padding: 0;background: transparent;}
.yt-miniaturas a div {position: absolute;width: 100%;overflow: hidden;padding: 0 4px;box-sizing: border-box;white-space: nowrap;text-overflow: ellipsis;bottom: 0;left: 0;font-size: 14px;line-height: 18px;font-family: Arial;color: white;background: #CC181E;opacity: .8;}
@media (max-width:470px) {.videominiaturas a div {display: none !important;}}
/* Símbolo cargador CSS - OPCIONAL */
.yt-video:before {content: "";display: inline-block;margin: 20% auto;border-width: 30px;border-radius: 50%;-webkit-animation: spin 1s linear infinite;-moz-animation: spin 1s linear infinite;animation: spin 1s linear infinite;border-style: double;border-color: #999 transparent;}
@-webkit-keyframes spin {100% {-webkit-transform: rotate(359deg);}}
@-moz-keyframes spin {100% {-moz-transform: rotate(359deg);}}
@keyframes spin {100% {transform: rotate(359deg);}}
.yt-general {padding: 10px;box-sizing: border-box;text-align: center;line-height: 0;font-size: 0;}
.yt-cargador {width: 1000px;max-width: 100%;margin: 0 auto;padding: 4%;background: #333;border-radius: 0 0 8px 8px;box-sizing: border-box;box-shadow: 0 0 10px #000 inset, 0px 0 25px #666 inset;}
.yt-video{position: relative;max-width: 100%;padding-bottom: 56.25%;height: 0;overflow: hidden;background: #000;}
.yt-video iframe,.yt-video object,.yt-video embed {width: 1600px;max-width: 100%;height: 100%;position: absolute;top: 0;left: 0;}
.yt-miniaturas {width: 1000px;max-width: 100%;margin: 0 auto;padding: 1% 4% 2%;background: #333;box-sizing: border-box;border-radius: 8px 8px 0 0;box-shadow: 0 0 10px #000 inset, 0px 0 25px #666 inset;}
.yt-miniaturas a {position: relative;display: inline-block;width: 20%;height: 0;overflow: hidden;padding: 0 0 13% 0;vertical-align:top;margin: 1% 0 0;border: 2px solid #333;box-sizing: border-box;transition: .3s all;}
.yt-miniaturas a:hover {z-index: 2;transform: scale(1.2);}
.yt-miniaturas a img {width: 100%;padding: 0;background: transparent;}
.yt-miniaturas a div {position: absolute;width: 100%;overflow: hidden;padding: 0 4px;box-sizing: border-box;white-space: nowrap;text-overflow: ellipsis;bottom: 0;left: 0;font-size: 14px;line-height: 18px;font-family: Arial;color: white;background: #CC181E;opacity: .8;}
@media (max-width:470px) {.videominiaturas a div {display: none !important;}}
/* Símbolo cargador CSS - OPCIONAL */
.yt-video:before {content: "";display: inline-block;margin: 20% auto;border-width: 30px;border-radius: 50%;-webkit-animation: spin 1s linear infinite;-moz-animation: spin 1s linear infinite;animation: spin 1s linear infinite;border-style: double;border-color: #999 transparent;}
@-webkit-keyframes spin {100% {-webkit-transform: rotate(359deg);}}
@-moz-keyframes spin {100% {-moz-transform: rotate(359deg);}}
@keyframes spin {100% {transform: rotate(359deg);}}
Y casi se me olvida. Con ese CSS el cargador será adaptable para cualquier ancho de pantalla.
Para practicar, modificar o mejorar, en este Codepen lo tenéis todo montado.
¿Vemos otro post al azar por si le encuentras utilidad o quizás prefieres ser más metódico y suscribirte a nuestras entradas por correo? También puedes imprimir este artículo y por supuesto compartirlo en redes sociales si fue de tu agrado.
excelente
ResponderEliminaryo lo hice tambien pero con el código sin estilo,el tuyo esta mejorado.
Eliminaraca un ejemplo:
http://modelos-motos.blogspot.com/p/videos.html
dame tu opinión maestro.
Hay muchos caminos para llegar a Roma, Karlosnum. Ese es otro más :)
EliminarGracias por esto, me viene genial para una idea de proyecto, saludos Oloman!
ResponderEliminarHola Oloman, perdona que deje este comentario en la entrada, pero hace unos días te mande a través del Formulario de Contacto una consulta acerca de implementar unos cambios en mi blog y me gustaría saber si habías recibido el mensaje.
ResponderEliminarMuchas gracias por todo.
Pues estoy prácticamente parado con peticiones-consultas-pedidos, pero la verdad es que tampoco recuerdo haber recibido nada con tu nick.
Eliminarbueno muchas gracias, no sabía que ahora no atendías peticiones ni pedidos. Un saludo
EliminarNo dije eso, sino que estoy prácticamente parado. Y es así porque no dispongo casi de tiempo. Hago cosillas, pero muy despacio.
EliminarLa segunda parte de mi contestación -que ahora confirmo- es que no he recibido nada con tu remite
Sencillamente espectacular.
ResponderEliminarHace poco que estoy en la cruzada de experimentar cambiar mi blog personal, quisiera incorporar vídeos, como bien se explican acá, ahora quisiera saber si los link de los mismos se ponen en la parte de la letra clara en los códigos q proporcionas?. Disculpa la ignorancia ja.
ResponderEliminarBueno, en la clara exactamente no. Sería dónde yo usé el color verde.
EliminarDe todas formas si vas leyendo detenidamente el texto de esta entrada, ahí se explica qué tienes que poner.
¡MUY bueno!
ResponderEliminarHola oloman una consulta ya que no logro que funcione en las entradas, si que funciona en las paginas estaticas. alguna solucion http://monstruitoslugo.blogspot.com.es/
ResponderEliminarGracias un saludo como siempre "The Best"
¿Una dirección dónde lo tengas que lo vea, Monstruitos?
EliminarMuy buena solución Oloman. Gracias por el código.
ResponderEliminarHola, buen día Oloman.
ResponderEliminarTengo la siguiente situación: cómo puedo hacer independientes las pantallas de reproducción cuando tengo en dos entradas distintas el cargador de videos.
En el siguiente enlace se muestra el problema:
goo.gl/qCInxD
Al reproducir los videos de la entrada "Colonia Santa Rosa", éstos aparecen en el reproductor de la entrada "Propiedades Termodinámicas del Agua".
Gracias por la ayuda que puedas darme!!!
Hola Oloman.
ResponderEliminarRecién me doy cuenta que la independencia de cada iframe está dada por su id-frame.
Problema resuelto. Saludos.
Pues nada Manuel, tú mismo. Estuve liado y llevo varios días intentando ponerme al día con los comentarios. Me alegro que lo solucionaras tú mismo.
Eliminar