Crear una galería de imágenes y texto sencilla con jQuery

Aprovechando lo que hicimos con jQuery en el artículo anterior Crear un menú con pestañas con jQuery, vamos a cambiar las pestañas por una galería de imágenes en tamaño pequeño, de tal manera que al hacer click sobre una de ellas aparezca en grande la imagen que le corresponde junto a un texto explicativo.

Es una galería sencilla y con muchas mejoras posibles, como podréis ver (podríamos poner que las imágenes avancen de manera automática, o unas flechas a izquierda y derecha para avanzar o retroceder en las imágenes grandes), pero nos puede servir para algunos proyectos. Lo que pretendemos hacer es esto:

Ver Demo

Como veis hay dos partes bien diferenciadas: la parte de las imágenes pequeñas, que hace la función de menú, y la parte de las imágenes grandes con su texto correspondiente. Para la parte de las imágenes pequeñas he optado, por sencillez, por aprovechar una solución ya existente. He utilizado jMyCarousel. Otras opciones disponibles son: jQuery Thumnail Scroller o Thumbnails preview slider, por ejemplo.

Comenzamos entonces con el contenido que vamos a mostrar, es decir, las imágenes grandes y el texto explicativo de cada una de ellas:

Simplemente hemos incluido cada imagen y su texto dentro de un div (imagen1, imagen2, etc..) y todo ello lo hemos envuelto en un div que hemos llamado contenido-galeria.

A continuación tenemos las imágenes pequeñas, que las hemos guardado en una carpeta que se llama “thumbs”, con una sencilla lista siguiendo las instrucciones de jMyCarousel. Es muy importante que los “href” de los enlaces se correspondan con los “div” de las imágenes grandes, tal y como veremos más adelante.

Ahora le vamos a dar unos pequeños estilos a todo esto:

Hemos utilizado los estilos sugeridos por jMyCarousel. Las imágenes grandes las vamos a posicionar de manera absoluta una sobre otra mediante jQuery (por eso ponemos #contenido-galeria con position: relative), por lo que jMyCarousel debe tener un margen superior alto para situarlo bajo las imágenes grandes. El texto lo posicionamos a la derecha de cada imagen también con position: absolute.

Y ahora vamos a ver las líneas de jQuery necesarias:

Vamos a ver línea a línea lo que hemos hecho:
- En la línea 1 hemos cargado jQuery.
- En la línea 2 hemos cargado el script de jMyCarousel, que lo podéis bajar desde su web.
- Líneas 4 a 17 son las propias de jMyCarousel. Lo que hacen es primero aplicar una cierta opacidad a todas las imágenes pequeñas con fadeTo. Luego con hover elimina la opacidad a las imágenes sobre las que se sitúa el ratón y se la vuelve a aplicar al quitar el ratón.
- En la línea 20 comienza el script que hace funcionar las imágenes grandes de arriba. Es prácticamente igual al que usamos para el menú con pestañas del artículo anterior.
- En la línea 21 posicionamos de manera absoluta todos los div que hay dentro del div general #contenido-galería. De esta manera ponemos todos los contenidos uno sobre otro en el mismo espacio. A continuación sacamos de esa selección al primer div mediante .not(:first), es decir, ahora la selección será todos los div menos el primero. Y esa selección la ocultamos mediante .hide(). Ahora la única imagen que se verá será la primera.
- En la línea 22 añadimos la clase “aqui” al primer div, es decir, a la primera imagen (que es la que no hemos ocultado). Como veréis la imagen que está siempre visible tendrá siempre la clase “aqui”.
- En la línea 23 comenzamos una función que recogerá las instrucciones a seguir cuando se haga click sobre un enlace del div jMyCarousel (es decir, sobre cualquier imagen de las pequeñas).
- En la línea 24 hacemos desaparecer el div que tiene la clase “aqui”. Cuando cargamos la página por primera vez, esta será la primera imagen.
- En la línea 25 hacemos una serie de cosas seguidas: primero eliminamos la clase “aqui” de todos los div. Luego seleccionamos el div que se corresponde con la imagen pequeña donde hemos hecho click. ¿Cómo hacemos esto? con .filter(this.hash). Como habréis visto los “id” de las imágenes grandes se llaman igual que los enlaces (href) de las imágenes pequeñas. Por ejemplo, la primera imagen pequeña tiene un href=”#imagen1″ y el primer div es id=”imagen1″. El “hash” de un enlace nos da lo que hay desde “#” incluyendo al mismo, es decir, que el “hash” del primer enlace es “#imagen1″ lo cual para jQuery es igual a un id=”imagen1″. Si ponemos (this.hash) lo que obtenemos es el hash del enlace sobre el que se ha hecho click (this nos da el enlace sobre el que se ha hecho click de entre todos los enlaces).
A continuación mostramos ese div que hemos seleccionado y le aplicamos la clase “aqui”.

¡Y eso es todo! Espero que os haya gustado y sobre todo, que os sea de alguna utilidad.

39 comentarios en “Crear una galería de imágenes y texto sencilla con jQuery

  1. Hola Juan.
    He implementado esta solución en una web, y me ocurre algo muy extraño. Todo funciona OK pero a veces, no me carga el carrusel de thumbnails al abrir la página de primeras.

    No tengo idea qué puede ser porque parece todo correctamente implementado. De hecho me acaba de pasar también al entrar en tu demo.

    Sabes algo al respecto?

    • Gracias Aurelio!

      No conseguía que me pasara lo que decías hasta que de repente me ha pasado. Era algo relacionado con la librería de myCarousel, he hecho tres cambios. Primero cambié en $function por $(document).ready(function) en el el script de jMyCarousel, pero no parecía que ayudara. Luego he fijado el alto tanto del contenedor de las imágenes como de jMyCarousel en la hoja de estilos, y parece que ya no da problemas. Si te sigue dando problemas dímelo. He introducido ya estos cambios en el artículo como en la demo.

      • Hola Juan, a veces al cargar el demo de tu pagina me pasa lo mismo, no carga las imagenes del jMyCarousel. Tendra algo que ver con el navegador?

        • Lo acabo de ver, era un ejemplo hecho con la web antigua y salía fatal! Lo he adecentado un poco y he añadido el ancho y el alto a cada imagen, con lo cual se arregla. Gracias!

  2. Estimado Juan, buenas tardes:

    Quisiera preguntarte como puedo enlazar un contenido o noticia con una galeria de fotos como ésta. Es decir, yo quiero hacer un comentario de moda con una foto de referencia en una página, y al final de este comentario poner “Ver Galeria de imagenes” para que me aparezca una galeria como ésta que tú has hecho y que tenga texto en cada foto. Espero que me puedas ayudar porque ya llevo un montón de tiempo intentando hacerlo, tengo un modelo de galeria programada pero me falta la primera parte de la noticia pero sigo sin poder solucionarlo. Soy una aficionada y quisiera tu ayuda. Un cordial saludo

  3. Hola Juan, gracias por contestar, mira yo empecé usando el macromedia dreamweaver sin saber nada de ningún otro programa, mi marido mirando en la ayuda me enseñó como hacer las tablas meter los botones flash y varias cosas más, los dos autoditactas, pero me di cuenta que a veces la información que había metido en ese programa se cambiaba de sitio, aunque no estaba mal el resultado, pero no me convenció y me quedé ahi, porque lo que yo siempre he querido es tener la galeria de fotos con su texto incluido y no tengo ni idea hasta ahora, hice algunos con photoshop pero no era lo que esperaba; luego he empezado otra pagina con la ayuda de mi hermana que entiende un poco mas que yo porque estuvo estudiando lo de las paginas web (aunque no lo terminó), pero esta vez en html, y esta saliendo bien, normalita, pero ninguna sabemos como encajar la galeria en la noticia, tenemos una galeria que me lo hizo un amigo en lightbox2 pero no sabemos como incluirla en la noticia, he pensado que vinculando la noticia con un subtitulo que ponga “ver imagenes” hacia la dirección de la galeria podria funcionar pero no me atrevo no vaya a ser que haga algo mal, asi que si tuvieras otra idea me gustaria que me ayudaras, si puede ser. Te agradezco anticipadamente tu atención. mari

    • Hola Mari, va a ser un poco dificil si no sabes al menos html y css. ¿No puedes encontrar algún amigo que te pueda ayudar? Yo si quieres una vez tengas colgada la página en internet te puedo orientar para solucionar cualquier error que tenga.

  4. Hola,

    muy bueno el artículo, me ha sido de gran ayuda, pero quería comentarte un detalle al igual que el usuario Aurelio, y es que en la demo me acaba de ocurrir lo mismo, a veces no me carga las imagenes en pequeño, puedes ver como queda aquí http://i54.tinypic.com/1429ehd.png

    Probando varias cosas porque sucede, resulta que si limpias el historial reciente del navegador y ves la galería sucede eso, pero si le vuelves a dar a actualizar funciona perfectamente…
    Lo que le comentastes al usuario Aurelio , ¿están hechas esas modificaciones en la demo también?

    Un saludo, y gracias.

  5. Hola juan como estas….estoy tratndo de subir mi web….implemente el carrusel y funciona fantastico pero lo ke intento hacer es ke no gire como si fuera un circulo , es decir ke cuando llegue a la ultima imagen se detenga ke no siga con la primera imagen eso se puede???? gracias de ante mano

  6. hola Juan
    Me interesa el codigo ya que le veo utilidad para una web que estoy haciendo. El problema que tengo es que el contenido del texto necesito que tenga divs con diferentes id y clases.
    Al poner el texto dentro de un div en vez de en el estilo no me muestra el texto y el sistema falla.

    saludos

  7. Saludos Juan.

    Ante todo felicitarte por estos fantásticos tutoriales, me están ayudando mucho a desarrollar mi página web.
    He incluido un carrusel de imágenes en la página de entrada y me da el mismo problema que a Aurelio, incluso con las correcciones que le proponías, pero curiosamente solo me pasa en el navegador Chome. Pero lo que realmente me interesa es saber que tendría que hacer para que la imagen grande fuera pasando automaticamente de una foto a otra.

    Muchas gracias por adelantado.

      • Muchas gracias por la respuesta y por que esta haya sido tan rapida.

        Efectivamente, una vez que especifiqué las dimensiones se resolvió el problema completamente.

        Respecto a lo de que las imagenes grandes fueran pasando automaticamente, solo he visto en la página de jMyCarousel el comando para que sea el carrusel de miniaturas el que se desplace por si mismo, así que imagino que serían necesarias modificaciones más importantes en el código.

        Saludos

  8. Hola, gracias por el codigo, estoy utilizandolo y no se como poder hacer que se ejecute una sola vez y que no este continuamente ejecutandose.

    Gracias

  9. Buenos dias de nuevo, creo que no me he explicado muy bien, la idea que tengo para hacer con este codigo es que tengo dos imagenes una vacia y otra con lo que quiero mostrar, para hacer el efecto que sale una imagen de un lada a otro, pues la idea es que cuando aparezca esta ultima imagen el slide se pare en esta ultima imagen y no vuelva a cargar la primera foto, no se que parametros deberia añadir en para que haga esto, simplemente quiero como un stop o algo similar

    Gracias

  10. Hola Juan, te saluda desde Perú, estoy buscando una we igualita pero con los thumb en forma vertical, porfavor me podrías indicar que se tiene que modificar o adicionar, sería UNA GRAN AYUDA.. Muchas gracias..!!

  11. Hola Juan, me ha encantado este tutorial, manejo Html y css y estoy comenzando con el mundillo del jquery.
    He realizado el tutorial y me funcioan perfectamente en firefox, pero no puedo ver las fotos en explorer y en chrome siempre visualizo la primera foto. Una ayudita por favor. Muchas gracias.

  12. Tengo un problema con el slider lo integre a mi sitio web pero las imagenes del carrusel superan el ancho que le doy que es de 500 px, quiero que no se vean las imagenes en miniatura fuera del carrusel y que este debajo unicamente de la imagen mas grande como puedo hacer esto, gracias espero que me ayudes.

  13. Hola buen dia, mira yo estoy desarrollando una galeria con jMyCarousel pero tengo una duda, exisitira en esta libreria la forma de que al ejecutarse automaticamente, adjunto el codigo :

    Me muestre cada una de las imagenes sin necesidad de dar clic, por el momento lo muestro al evento hover, pero si me interesaria un poco el que se haga automatico al ir recorriendose el carrusel, soy nuevo pero si entiendo conceptos de programacion, de igual manera gracias.

  14. hola es posible realizar esto en wordpress???
    yo simplemente necesito una galeria de imagenes con un texto explicativo a la derecha y no hay forma de hacerlo y esta opción me gusta pero no se si la puedo usar en mi pagina wordpress

  15. Debo agradecerte mucho este post porque me permitió acabar la página de like, pero ahora lo que me pasa es algo muy curioso (y bastante horrible).

    En los 3 navegadores principales (Explorer, Firefox y Chrome) me funciona perfecto la página:

    Pero cuando corro la página como aplicación dentro de Facebook, sólo funciona bien en Firefox, en Chrome las imágenes salen todas en vertical y en Explorer lanza unos errores de Javascript y también se ve mal la página.

    De repente me puedes ayudar. Si hay que pagar algo, de repente me conviene contratarte para arreglar esto.

  16. Lo estoy tratando de ver en un celular Samsung GT-i5800. No sé mucho de navegadores de celulares. Disculpa no contestar antes. Otra cosa, es posible cambiar la rutina de girar las fotos pequeñas indefinidamente y sin necesidad de aplicar en las flechas de ambos lados?? En que linea puedo alterar esto? Gracias.

    • No sabría decirte por qué no se ven en tu móvil… Por otro lado ten en cuenta que el artículo es antiguo, no sé si habrá nuevas versiones del script usado para el carrusel…

  17. Todo va pero esta parte del ejemplo donde la inserto, encabezado, body. o donde?

  18. inserte el codigo en un archivo pero no me aparecen los div me aparece todas las imagenes en lista me podrias mandar el archivo ami correo esta galeria la llevo buscado ya mucho rato seria de gran ayuda

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">