PhotoSwipe: tu galería de imágenes preferida
  • Introduction
  • First Chapter
Powered by GitBook
On this page

Introduction

NextFirst Chapter

Last updated 7 years ago

PhotoSwipe es una galería de imágenes JavaScript sin dependencias.

Y lo que más importa es que:

  • Es altamente modificable, tanto sus opciones como maquetado.

  • Funciona en mobile (soporta gestos touch)

  • Manipula la API Historial del explorador. Quiere decir que se puede usar el botón retroceso del explorador para cerrar la galería. Por otro lado cada item de cada galería tiene una URL única (se puede compartir la URL a la imagen directamente).

  • Se puede hacer Zoom

  • Crea la ilusión de que las imágenes cargan rápido.

  • Responsive

  • Se puede usar el teclado para manejarlo

  • Se puede realizar Social sharing (desde la UI)

  • Se pueden descargar las imágenes (desde la UI).

Para más información conviene ir a su

Para poder implementarla en una app Rails debemos hacer lo siguiente:

en el gemfile.rb

gem 'photoswipe-rails'

en app/assets/javascripts/application.js

//= require photoswipe
//= require photo_swipe_config.js

en app/assets/stylesheets/application.css.sass

//= require photoswipe

Creamos un partial, por ejemplo app/views/shared/_photoswipe.html.haml En este ponemos el siguiente código.

.pswp{"aria-hidden" => "true", :role => "dialog", :tabindex => "-1", :id => "post-gallery"}
  /
    Background of PhotoSwipe.
    It's a separate element, as animating opacity is faster than rgba().
  .pswp__bg
  / Slides wrapper with overflow:hidden.
  .pswp__scroll-wrap
    / Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory.
    .pswp__container
      / don't modify these 3 pswp__item elements, data is added later on
      .pswp__item
      .pswp__item
      .pswp__item
    / Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed.
    .pswp__ui.pswp__ui--hidden
      .pswp__top-bar
        / Controls are self-explanatory. Order can be changed.
        .pswp__counter
        %button.pswp__button.pswp__button--close{:title => "Cerrar (Esc)"}
        %button.pswp__button.pswp__button--share{:title => "Compartir"}
        %button.pswp__button.pswp__button--fs{:title => "Pantalla completa"}
        %button.pswp__button.pswp__button--zoom{:title => "Acercar/Alejar"}
        / Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR
        / element will get class pswp__preloader--active when preloader is running
        .pswp__preloader
          .pswp__preloader__icn
            .pswp__preloader__cut
              .pswp__preloader__donut
      .pswp__share-modal.pswp__share-modal--hidden.pswp__single-tap
        .pswp__share-tooltip
      %button.pswp__button.pswp__button--arrow--left{:title => "Anterior"}
      %button.pswp__button.pswp__button--arrow--right{:title => "Siguiente"}
      .pswp__caption
        .pswp__caption__center

Lo que hacemos ahora es incorporar este partial al layout de nuestra app:

= render 'shared/photoswipe'

Acá se pueden definir las opciones que queramos. Ver la documentación oficial. Notar el selector que se usa al final

'.js-pswp-container'

Hasta acá con esta configuración podemos cargar una galería de imágenes en cualquier parte del sitio respetando el selector mencionado anteriormente y respetando cierto maquetado para que funcione. Por ejemplo, en el show de un post de handing, mostramos las imágenes que se adjuntaron al mismo de esta forma:

.js-pswp-container
  - post.all_images.each do |file|
    %figure.text-center.post-gallery-img{:itemprop => "associatedMedia", :itemscope => "", :itemtype => "http://schema.org/ImageObject"}
      %a.post-img-gallery-container{"data-size" => "#{dimensions_in_str_for(file)}", :href => "#{file.url}", :itemprop => "contentUrl"}
        %img{:alt => "Image description", :itemprop => "thumbnail", :src => "#{file.url(:thumb)}", class: "img-pswp-gallery"}
      %figcaption{:itemprop => "caption description", :style => "display:none;"}
        = file.name

Es importante respetar las etiquetas figure, a, img y figcaption y los atributos que hay en ellas.

IMPORTANTE: PhotoSwipe necesita saber las dimensiones y la url de la imagen. Pueden ver el atributo:

"data-size" => "#{dimensions_in_str_for(file)}" Este es un helper method que me armé para traerme las dimensiones de la imagen del estilo "1600x800" por ejemplo. Esto pueden lograrlo con MiniMagick.

MiniMagick::Image.open(path).width
MiniMagick::Image.open(path).height

Lo importante de esta estructura que armamos es que podemos crear otra galería, incluso en la misma vista, utilizando el selector antes mencionado y el maquetado para cada imagen.

Este es un ejemplo, pero de este maquetado hay ciertos elementos que deben estar siempre. Pueden ver el ejemplo que presenta PhotoSwipe en su . Lo importante es que se puede modificar bastante.

En app/assets/javascripts/photo_swipe_config.js poner el siguiente

página oficial.
guía
Código