Recursos web, diseño, joomla!, tutoriales, opinión, algunas noticias...

Suscríbete a través del feed RSS

Tutorial: Crear una galería de imágenes utilizando jQuery
Lunes, 03 de Noviembre de 2008 13:32
Si hay una razón por la cual jQuery se está volviendo tan masivo, es porque cumple con su eslogan ("Escribe menos, realiza más") de pie a cabeza.
Y cumpliendo con dichas palabras, vamos a crear una simple galería de imágenes:

Galería de imágenes utilizando jQuery

Para eso vamos a utilizar un par de plugins:
  • jQuery Cycle Plugin: Para realizar la galería, navegación, control y transiciones
  • Fancybox: Para poder cargar la imagen original con un efecto de zoom...

Antes de empezar, puedes descargar los archivos de ejemplo

 

HTML

Cargamos en el head del HTML la última versión de jQuery y los plugins:

HTML
  1. <script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
  2. <script type="text/javascript" src="js/jquery.cycle.all.pack.js"></script>
  3. <script type="text/javascript" src="js/jquery.fancybox.js"></script>
  4.  
  5. <!--[if IE 6 ]>
  6. <script type="text/javascript" src="js/jquery.pngFix.pack.js"></script>
  7. <![endif]-->
  8.  
  9. <link href="css/fancybox.css" media="screen" rel="stylesheet" type="text/css"/>

 

De manera alternativa, si deseamos que los PNGs transparentes que utiliza Fancybox se visualicen correctamente en Internet Explorer 6 podemos incluir el plugin pngFix (ya viene en el paquete de descarga de Fancybox)

En el body, tendremos dos DIVs principales:

  • Uno con el ID "galeria" que contendrá los controles de Siguiente/Anterior y la imagen principal seleccionada
  • Y otro con el ID "navegación" que contendrá las imágenes en miniatura de la galería para seleccionar cual queremos ver
HTML
  1. <div id="galeria">
  2.  
  3. <div id="controles">           
  4. <--!Aquí van los controles de Siguiente y Anterior-->
  5. </div>
  6.  
  7. <div id="imagenes">
  8. <--!Aquí van las imágenes que se visualizan,con sus textos y links a imágenes originales-->
  9. </div>
  10.  
  11. </div>
  12.                      
  13. <div id="navegacion">
  14. <--!Aquí van las imágenes en miniatura para la navegación-->
  15. </div>

 

HTML Galería

La creación de los controles es sencillo, un DIV con dos enlaces:

HTML
  1. <div id="controles">
  2. <a href="" id="ant">Anterior</a>
  3. <a href="" id="sig">Siguiente</a>
  4. </div>

 

Mientras que el HTML que muestra las imágenes principales será:

HTML
  1. <div id="imagenes">
  2.  
  3. <div class="sombra">
  4. <a href="images/1_o.jpg" title="Beach Sunset"><img src="images/1.jpg" width="500" height="333"/></a>
  5. <span class="texto"><p>Beach Sunset, por <a href="http://flickr.com/photos/chris_gin/">Chris Gin (away)</a></p></span>
  6. </div>
  7.  
  8. <div class="sombra">
  9. <a href="images/2_o.jpg" title="Before the Total Eclipse"><img src="images/2.jpg" width="500" height="333"/></a>
  10. <span class="texto"><p>Before the Total Eclipse, por <a href="http://flickr.com/photos/shutterhack/">Shutterhack</a></p></span>
  11. </div>
  12.  
  13. <div class="sombra">
  14. <a href="images/3_o.jpg" title="Grace Bay Beach Pier"><img src="images/3.jpg" width="500" height="333"/></a>
  15. <span class="texto"><p>Grace Bay Beach Pier, por <a href="http://flickr.com/photos/wisdoc/">WisDoc</a></p></span>
  16. </div>
  17.  
  18. <div class="sombra">
  19. <a href="images/4_o.jpg" title="Hanakapiai Beach, Na Pali Coast, Kauai, Hawaii"><img src="images/4.jpg" width="500" height="333"/></a>
  20. <span class="texto"><p>Hanakapiai Beach, Na Pali Coast, Kauai, Hawaii, por <a href="http://flickr.com/photos/kubina/">Jeff Kubina</a></p></span>
  21. </div>
  22.  
  23. <div class="sombra">
  24. <a href="images/5_o.jpg" title="Marshall's Beach Sunset, San Francisco"><img src="images/5.jpg" width="500" height="333"/></a>
  25. <span class="texto"><p>Marshall's Beach Sunset, San Francisco, por <a href="http://flickr.com/photos/mumbleyjoe/">MumbleyJoe</a></p></span>
  26. </div>
  27.  
  28. <div class="sombra">
  29. <a href="images/6_o.jpg" title="North island beach"><img src="images/6.jpg" width="500" height="333"/></a>
  30. <span class="texto"><p>North island beach, por <a href="http://flickr.com/photos/ktb/">killthebird</a></p></span>
  31. </div>
  32.  
  33. </div>

 

Cada imagen está contenida en un DIV con la clase "sombra". Dentro de él cargamos la imagen a visualizar y un texto como acompañamiento de la imagen (dentro de las etiquetas SPAN). Además cada imagen linkea hacia su correspondiente imagen original (en mayor tamaño) para ser visualizado con Fancybox.


HTML Navegación


La navegación es una lista donde cada elemento es una imagen en miniatura:

HTML
  1. <div id="navegacion">
  2.  
  3. <li><a href="#"><img src="images/1_s.jpg" width="75" height="75" title="Beach Sunset"/></a></li>
  4. <li><a href="#"><img src="images/2_s.jpg" width="75" height="75" title="Before the Total Eclipse"/></a></li>
  5. <li><a href="#"><img src="images/3_s.jpg" width="75" height="75" title="Grace Bay Beach Pier"/></a></li>
  6. <li><a href="#"><img src="images/4_s.jpg" width="75" height="75" title="Hanakapiai Beach, Na Pali Coast, Kauai, Hawaii"/></a></li>
  7. <li><a href="#"><img src="images/5_s.jpg" width="75" height="75" title="Marshall's Beach Sunset, San Francisco"/></a></li>
  8. <li><a href="#"><img src="images/6_s.jpg" width="75" height="75" title="North island beach"/></a></li>
  9. </ul>
  10.  
  11. </div>
Navegacion de la galería

 

Javascript 

Es tan sencillo como escribir 15 lineas de código! Quien no halla trabajado con jQuery debe saber que todo el código se inicializa con el evento ready:

Javascript
  1. $(document).ready(function(){
  2.    // Todo el código va aquí
  3. });

 

Una vez listo, lo primero que hacemos es inicializar Fancibox en donde queremos que trabaje y añadirle unos parámetros:

Javascript
  1. //Inicializamos fancybox
  2. $(".sombra a").fancybox({
  3. 'overlayShow': true, //Lo activamos para que queden bloqueados los elementos de la galería
  4. 'overlayOpacity':0 //Cero opacidad del fondo
  5. });

 

Luego creamos un efecto para mostrar y ocultar los controles de Siguiente y Anterior al pasar el puntero sobre la imagen principal de la galería:

 

Javascript
  1. //Añadimos un efecto a los controles
  2. $('#galeria').hover(
  3. function() {
  4. $('#controles').slideToggle("fast");
  5. },
  6. function() {
  7. $('#controles').slideToggle("fast");
  8. });

 

Por último seteamos los parámetros de la galería:

Javascript
  1. //Seteamos los efectos de la galería
  2. $('#imagenes').cycle({
  3. fx: 'turnDown', //Efecto de la galería
  4. speed: 1500, //Velocidad del efecto
  5. timeout: 0, //Tiempo entre transiciones
  6. pager: '#navegacion', //Identificador de la navegación
  7. pagerAnchorBuilder: function(idx, slide) {
  8. return '#navegacion li:eq(' + idx + ') a'; //Asignamos la navegacion a los elementos dentro de #navegacion
  9. },
  10. prev:'#ant', //Identificador para Anterior
  11. next:'#sig' //Identificador para Siguiente
  12. });

jQuery Cycle Plugin es un plugin muy versatil, y posee muchos más parámetros y efectos para personalizar la galería, recomiendo pasar por la documentación para ver todas sus características.

CSS

Finalmente aplicamos un poco de CSS a lo que hemos creado:

CSS
  1. *{
  2. padding:0px;
  3. margin:0px;
  4. border:0px;
  5. }
  6.  
  7. body{
  8. background:#FFF;
  9. font-size:12px;
  10. font-family: Arial,Helvetica,sans-serif;
  11. }
  12.  
  13. /*Controles de Siguiente y Anterior*/
  14. #controles {
  15. z-index: 30;
  16. position: absolute;
  17. bottom: 0;
  18. left: 0;
  19. display: none;
  20. background-color: #ffc;
  21. border: 1px solid #ddd;
  22. margin-bottom: 138px;
  23. margin-left:15px;
  24. padding: 6px;
  25. width: 120px;
  26. }
  27.  
  28. #controles a{
  29. color:#0066CC;
  30. padding-right:7px;
  31. }
  32.  
  33. /*Navegación de la galería*/
  34. #navegacion{
  35. background-color: #FFFFCC;
  36. width: 530px;
  37. height: 85px;
  38. }
  39.  
  40. #navegacion ul {
  41. padding: 5px 0px;
  42. list-style: none;
  43. float: left;
  44. }
  45.  
  46. #navegacion li {
  47. display: inline;
  48. }
  49.  
  50. #navegacion ul li a{
  51. color: #FFF;
  52. float: left;
  53. text-decoration: none;
  54. display:block;
  55. width:75px;
  56. height:75px;
  57. margin-right:5px;
  58. margin-left:6px;
  59. }
  60.  
  61. /*Esta clase se añade en el thumbnail seleccionado*/
  62. #navegacion .activeSlide{
  63. border: 2px solid #0066CC;
  64. }
  65.  
  66. /*Tamaño de la galería*/
  67. #galeria { 
  68. height: 390px;
  69. width: 540px;
  70. }
  71.  
  72. /*Texto que acompaña la imagen principal*/
  73. .texto {
  74. display:block;
  75. width:100%;
  76. margin:0;
  77. padding:10px 0;
  78. }
  79.  
  80. .texto a{
  81. color:#0066CC;
  82. }
  83.  
  84. /*Efecto de sombra sobre la imagen principal*/
  85. .sombra {
  86. width: 520px;
  87. padding: 5px 0px 5px 15px;
  88. background:transparent url(../images/shadow.gif) no-repeat scroll right bottom!important;
  89. position:relative;
  90. }

 

Descargar los archivos de ejemplo | Ver demostración

 

Extra: Añadir reproducción automática y controles de Play y Pausa

Es tan sencillo como:

- Añadir a los controles los enlaces de Play y Pausa

HTML
  1. <div id="controles">
  2. <a href="" id="ant">Anterior</a>
  3. <a href="" id="sig">Siguiente</a>
  4. <a href="" id="pausa">Pausa</a>
  5. <a href="" id="play">Play</a>
  6. </div>

 

- Modificar el parámetro timeout de la galería y ponerle un valor entre transiciones en milisegundos (por ejemplo 3000)

Javascript
  1. //Seteamos los efectos de la galería
  2. $('#imagenes').cycle({
  3. fx: 'turnDown', //Efecto de la galería
  4. speed: 800,//Velocidad de la transición
  5. timeout: 3000, //Tiempo entre transiciones
  6. delay: 1000, //Tiempo de espera en comenzar la reproducción inicial
  7. pager: '#navegacion', //Identificador de la navegación
  8. pagerAnchorBuilder: function(idx, slide) {
  9. return '#navegacion li:eq(' + idx + ') a'; //Asignamos la navegacion a los elementos dentro de #navegacion
  10. },
  11. prev:'#ant', //Identificador para Anterior
  12. next:'#sig' //Identificador para Siguiente
  13. });

 

- Vincular las funciones de Play y Pausa a los controles

Javascript
  1. //Seteamos las funciones de los controles para pausa y play
  2. $('#pausa').click(function() {
  3. $('#imagenes').cycle('pause');
  4. return false;
  5. });
  6.  
  7. $('#play').click(function() {
  8. $('#imagenes').cycle('resume');
  9. return false;
  10. });

 

- Al hacer click en una imagen para verla con Fancybox, tendremos que parar la reproducción de la galería:

Javascript
  1. $('.sombra a').click(function() {
  2. $('#controles #pausa').trigger('click');
  3. return false;
  4. });

 

Y si al cerrar la imagen queremos que siga reproduciendo agregamos:

Javascript
  1. $('#fancy_close').click(function() {
  2. $('#controles #play').trigger('click');
  3. return false;
  4. });

 

- Finalmente modificamos el ancho de los controles en el CSS:

CSS
  1. #controles {
  2. z-index: 30;
  3. position: absolute;
  4. bottom: 0;
  5. left: 0;
  6. display: none;
  7. background-color: #ffc;
  8. border: 1px solid #ddd;
  9. margin-bottom: 140px;
  10. margin-left:10px;
  11. padding: 6px;
  12. width: 200px;
  13. }
 

¿Te ayudó este artículo?Puedes suscribirte al feed RSS ó dejar tu email para recibir las últimas noticias, tal como lo hacen actualmente las 2490 personas que siguen al blog

Comentarios (3)
1
Miércoles, 05 de Noviembre de 2008 07:50
Realmente esta genial...

Esta desarrollado para 6 imágenes miniatura.

Deseo poner más de 6, tal vez hay la manera de poder mostrar las siguientes

En otras palabras se borren las anteriores y aparezcan las nuevas 6 al dar clic en un botón, por ejemplo “siguientes”
Jueves, 06 de Noviembre de 2008 11:08
Es una buena sugerencia, se podría hacer, lo voy a tener en cuenta para mejorarlo, saludos
3
Domingo, 04 de Enero de 2009 09:55
Yo tengo un fotoblog y ando buscando algo parecido al tutorial, es decir, poder hacer una galería de imágenes con todas mis fotos publicadas en el blog para que la gente pueda elegir. La duda que tengo que se pueden usar con jquery imágenes alojadas en flickr y como dice @pasley si se pueden incluir más de 6. Gracias

Agrega un comentario

  • Por favor, manten el tópico de los mensajes en relevancia con el tema del artículo.
  • Comentarios con lenguaje inapropiado seran borrados
Nombre:
E-mail:
Sitio web:
Comentario:

Puedes suscribirte al blog de dos formas

Ingresando tu e-mail:

Utilizando el canal RSS: