Advertisement
  1. Web Design
  2. PhotoSwipe

¿La perfecta galería de imágenes? Usando PhotoSwipe con jQuery

Scroll to top
Read Time: 6 min

Spanish (Español) translation by Javier Salesi (you can also view the original English article)

Recientemente descubrí una librería Javascript llamada PhotoSwipe y estoy realmente impresionado. Es una brillante librería que superpone una imagen o un grupo de imágenes en tu página, un efecto popularmente conocido como lightbox. PhotoSwipe es actualmente desarrollada por Dmitry Semenov-él la reconstruyó el año pasado cuando tomó las riendas del proyecto. Las mejoras incluyen:

  • Modular: PhotoSwipe es construida en varios módulos, permitiéndote omitir características particulares que no necesitas. Ésto mantiene la librería muy ligera.
  • Responsiva o Adaptable: una característica indispensable desde todos los puntos de vista. Photoswipe muestra el tamaño de imagen apropiado basándose en la actual ventana gráfica.
  • Gestos táctiles: PhotoSwipe soporta algunos gestos táctiles que permiten a los usuarios interactuar a través de Pulsar o Pinchar, dándole funcionalidades de ventana emergente, zoom, y cerrar. 

La única desventaja es que PhotoSwipe no se ejecuta inmediatamente. Como el desarrollador señala:

"PhotoSwipe es hecha simple y rápida para los usuarios finales, no para los desarrolladores. No es un simple plugin de jQuery, al menos se requiere un conocimiento básico de JavaScript para instalarla.

Pero puede ser usada conjuntamente con otras librerías. En éste tutorial, vamos a ver como utilizar PhotoSwipe con jQuery. Haremos todo el proceso fácilmente comprensible, aún si no eres experto en JavaScript.

Iniciemos.

1. Comenzando

Comenzaremos con:

  1. Creando los directorios del proyecto.
  2. Creando un documento HTML.
  3. Enlazando a jQuery. En éste tutorial voy a usar jQuery 2.0, por lo tanto sólamente funciona con navegadores modernos.
  4. Incluir las copias de la librería PhtoSwipe que comprenden los archivos: photswipe.min.js, photoswipe-ui-default.min.js (el código que construye el PhotoSwipe UI), default-skin.css, default-skin.png, default-skin.svg, y preloader.gif.
  5. Arreglar en orden los archivos en tu directorio preferido y enlazarlos dentro del archivo HTML.

2. Estructurando el HTML

La estructura HTML es la parte más esencial ya que eventualmente indicará como escribimos JavaScript.  Aquí asumiré que tenemos un par de imágenes, como sigue:

1
<div class="picture" itemscope itemtype="http://schema.org/ImageGallery">
2
  <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
3
    <a href="img/city-1.jpg" itemprop="contentUrl" data-size="1000x667" data-index="0">
4
      <img src="img/city-1-thumb.jpg" height="400" width="600" itemprop="thumbnail" alt="Beach">
5
    </a>
6
  </figure>
7
  <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
8
      <a href="img/city-2.jpg" itemprop="contentUrl" data-size="1000x667" data-index="1">
9
          <img src="img/city-2-thumb.jpg" height="400" width="600" itemprop="thumbnail" alt="">
10
      </a>
11
  </figure>
12
</div>

Atributos Data (Personalizados)

Además de la clase y los atributos de Schema (que ayudarán con SEO), también hemos añadido un atributo data-* en la etiqueta anchor (enlace) que incluye la imagen. Éste guardará el tamaño completo (anchura x altura) de la imagen.

Más código HTML

Ahora agregamos el código que PhotoSwipe usará para superponer las imágenes completas. Agrega ésto justo antes de la etiqueta de cierre body </body>

1
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
2
    <div class="pswp__bg"></div>
3
    <div class="pswp__scroll-wrap">
4
5
        <div class="pswp__container">
6
            <div class="pswp__item"></div>
7
            <div class="pswp__item"></div>
8
            <div class="pswp__item"></div>
9
        </div>
10
11
        <div class="pswp__ui pswp__ui--hidden">
12
            <div class="pswp__top-bar">
13
                <div class="pswp__counter"></div>
14
                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
15
                <button class="pswp__button pswp__button--share" title="Share"></button>
16
                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
17
                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
18
                <div class="pswp__preloader">
19
                    <div class="pswp__preloader__icn">
20
                      <div class="pswp__preloader__cut">
21
                        <div class="pswp__preloader__donut"></div>
22
                      </div>
23
                    </div>
24
                </div>
25
            </div>
26
            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
27
                <div class="pswp__share-tooltip"></div> 
28
            </div>
29
            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
30
            </button>
31
            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
32
            </button>
33
            <div class="pswp__caption">
34
                <div class="pswp__caption__center"></div>
35
            </div>
36
        </div>
37
    </div>
38
</div>

Establecimos el HTML, ahora podemos proceder con JavaScript. Como lo mencioné usaremos jQuery.

3. jQuery

Nuestras imágenes están agrupadas dentro de un div con una clase picture. Puede haber más grupos de imágenes dentro de la página, por lo tanto iteramos a través de cada elemento .picture.

1
$('.picture').each( function() {
2
  	
3
});

Detalles

PhotoSwipe nos pide que proporcionemos la fuente de la imagen junto con su tamaño. Para ésto creamos una función que iterará a través de la etiqueta anchor (enlace) para tomar éstos detalles,  de ésta forma:

1
$('.picture').each( function() {
2
    var $pic     = $(this),
3
        getItems = function() {
4
            var items = [];
5
            $pic.find('a').each(function() {
6
                var $href   = $(this).attr('href'),
7
                    $size   = $(this).data('size').split('x'),
8
                    $width  = $size[0],
9
                    $height = $size[1];
10
11
                var item = {
12
                    src : $href,
13
                    w   : $width,
14
                    h   : $height
15
                }
16
17
                items.push(item);
18
            });
19
            return items;
20
        }
21
22
    var items = getItems();
23
});

Dividamos éste código en varias piezas:

  1. Primero iniciamos con un arreglo vacío items)[].
  2. Luego iteramos a través de cada etiqueta anchor con el método.each() .
  3. $href=$(this).attr('href') obtiene el valor en el atributo href, guardando la ruta de la imagen.
  4. $size=$(this).data('size').split('x') obtendrá el valor del atributo data-size a través del método jQuery .data() . Entonces usamos el método split() para separar el valor.
  5. Podemos obtener el valor de la anchura y la altura por separado con: $width=$size[0] y $height=$size[1].
  6. Usando el método push() recogemos toda ésta información en un arreglo.

Probar en la Consola

Ahora tenemos la fuente de la imagen y el tamaño de la imagen almacenada en la variable items. Para verificar, puedes ejecutar la variable a través de console.log() y deberías encontrar la siguiente estructura de datos en DevTools (herramientas para desarrolladores).

Click

Posteriormente, unimos el elemento figure con el evento click, construimos una instancia PhotoSwipe, pasamos el items junto con las opciones de configuración, y finalmente inicializamos PhotoSwipe.

1
var $pswp = $('.pswp')[0];
2
$pic.on('click', 'figure', function(event) {
3
    event.preventDefault();
4
    
5
    var $index = $(this).index();
6
    var options = {
7
        index: $index,
8
        bgOpacity: 0.7,
9
        showHideOpacity: true
10
    }
11
    
12
    // Initialize PhotoSwipe

13
    var lightBox = new PhotoSwipe($pswp, PhotoSwipeUI_Default, items, options);
14
    lightBox.init();
15
});

La razón por la que usamos el elemento figure para hacer click, en lugar de la etiqueta anchor, es para que podamos obtener fácilmente el índice (o el orden subsecuente). Ésto nos permite informar a PhotoSwipe del índice correcto para superponer la imagen correspondiente.

Conclusión

Acabamos de implementar PhotoSwipe utilizando jQuery. El código es comparablemente más corto y más fácilmente entendible que cuando es escrito en puro JavaScript.

Ahora que ya iniciaste, puedes también ajustar PhotoSwipe con varias opciones proporcionadas e incluso precargar la imagen así que verás la imagen completa instantáneamente al hacer click.  Dejaré los estilos a tu imaginación ya que no hay reglas estrictas para éstos.

Espero que hayas aprendido algo en éste tutorial, y encontrarlo útil a veces. No olvides checar el demo y externar cualquier pregunta o idea en la sección de comentarios.

Más Recursos

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.