Presentacion de imagenes apiladas

1 comentó

Cuando queremos mostrar una galeria de imagenes en nuestro blog, pienso que la manera estetica de hacerla es fundamental. Si es original y encima tiene animaciones como esta, no te digo 'na'. Utilizando el CSS3 y el Javascript se consigue esta presentacion con las imagenes apiladas-desordenadas que al hacer click sobre ellas, estas van pasando como si lo hicieramos con la mano.






















Si quieres ponerla en tu blog o web, primero copia este codigo y pegalo en tu plantilla antes de </head>.
Ver/Ocultar Codigo

<script>
(function() {

var queue = false,
    touch = 'ontouchstart' in document.documentElement ? true : false,
    images = document.querySelector('.images'),
    imageWidth = images.firstElementChild.offsetWidth,
    imageOffset = images.firstElementChild.offsetLeft,
    cssTransition = function () {
      var body = document.body || document.documentElement,
          style = body.style,
          property = 'Transition',
          vendors = ['Moz', 'Webkit', 'O', 'ms'],
          vendorCount = vendors.length;

      if (typeof style[property.toLowerCase()] === 'string') {
        return true;
      }

      do {
        if (typeof style[vendors[vendorCount] + property] === 'string') {
          return true;
        }
      } while (vendorCount--);

      return false;
    },
    timeout = cssTransition() ? [300, 400] : [0, 0];

images.addEventListener(touch ? 'touchend' : 'click', function (event) {
  if (!queue) {
    queue = true;

    var direction = ((touch ? event.changedTouches[0].pageX : event.pageX) - imageOffset) > imageWidth / 2 ? 'slide-right' : 'slide-left',
        last = images.lastElementChild.classList;

    last.add(direction);

    setTimeout(function () {
      last.remove(direction);
      last.add('back');

      setTimeout(function () {
        images.insertBefore(images.lastElementChild, images.firstElementChild);
        last.remove('back');
        queue = false;
      }, timeout[0]);
    }, timeout[1]);
  }
}, false);

})();
  </script>


<style>
.images {
  cursor: pointer;position:relative;
}
.images:hover .image:nth-child(4) {
  -webkit-transform: rotate(10deg) translateX(50px);
  -moz-transform: rotate(10deg) translateX(50px);
  -ms-transform: rotate(10deg) translateX(50px);
  -o-transform: rotate(10deg) translateX(50px);
  transform: rotate(10deg) translateX(50px);
}
.images:hover .image:nth-child(3) {
  -webkit-transform: rotate(3deg) translateX(75px);
  -moz-transform: rotate(3deg) translateX(75px);
  -ms-transform: rotate(3deg) translateX(75px);
  -o-transform: rotate(3deg) translateX(75px);
  transform: rotate(3deg) translateX(75px);
}
.images:hover .image:nth-child(2) {
  -webkit-transform: rotate(-2deg) translateX(-50px);
  -moz-transform: rotate(-2deg) translateX(-50px);
  -ms-transform: rotate(-2deg) translateX(-50px);
  -o-transform: rotate(-2deg) translateX(-50px);
  transform: rotate(-2deg) translateX(-50px);
}
.images:hover .image:first-child {
  -webkit-transform: rotate(-8deg) translateX(-75px) translateY(-10px);
  -moz-transform: rotate(-8deg) translateX(-75px) translateY(-10px);
  -ms-transform: rotate(-8deg) translateX(-75px) translateY(-10px);
  -o-transform: rotate(-8deg) translateX(-75px) translateY(-10px);
  transform: rotate(-8deg) translateX(-75px) translateY(-10px);
}

.image {
  position: absolute;
  top: 50%;
  left: 50%;
  height: 250px;
  width: 300px;
  margin-top: -110px;
  margin-left: -105px;
  border: 5px solid #fff;
  border-bottom-width: 15px;
  -webkit-box-shadow: 7px 7px 5px rgba(50, 50, 50, 0.75);
-moz-box-shadow:    7px 7px 5px rgba(50, 50, 50, 0.75);
box-shadow:         7px 7px 5px rgba(50, 50, 50, 0.75);
  z-index: 2;
  -webkit-transition: -webkit-transform 0.3s ease-in-out;
  -moz-transition: -moz-transform 0.3s ease-in-out;
  -o-transition: -o-transform 0.3s ease-in-out;
  transition: transform 0.3s ease-in-out;
}
.image:first-child {
  -webkit-transform: rotate(8deg);
  -moz-transform: rotate(8deg);
  -ms-transform: rotate(8deg);
  -o-transform: rotate(8deg);
  transform: rotate(8deg);
}
.image:nth-child(2) {
  -webkit-transform: rotate(2deg);
  -moz-transform: rotate(2deg);
  -ms-transform: rotate(2deg);
  -o-transform: rotate(2deg);
  transform: rotate(2deg);
}
.image:nth-child(3) {
  -webkit-transform: rotate(-3deg);
  -moz-transform: rotate(-3deg);
  -ms-transform: rotate(-3deg);
  -o-transform: rotate(-3deg);
  transform: rotate(-3deg);
}
.image:nth-child(4) {
  -webkit-transform: rotate(-10deg);
  -moz-transform: rotate(-10deg);
  -ms-transform: rotate(-10deg);
  -o-transform: rotate(-10deg);
  transform: rotate(-10deg);
}
.image:last-child {
  -webkit-transform: rotate(-5deg);
  -moz-transform: rotate(-5deg);
  -ms-transform: rotate(-5deg);
  -o-transform: rotate(-5deg);
  transform: rotate(-5deg);
}
.image.slide-right {
  -webkit-transform: rotate(290deg) translateX(250px);
  -moz-transform: rotate(290deg) translateX(250px);
  -ms-transform: rotate(290deg) translateX(250px);
  -o-transform: rotate(290deg) translateX(250px);
  transform: rotate(290deg) translateX(250px);
}
.image.slide-left {
  -webkit-transform: rotate(-290deg) translateX(-250px);
  -moz-transform: rotate(-290deg) translateX(-250px);
  -ms-transform: rotate(-290deg) translateX(-250px);
  -o-transform: rotate(-290deg) translateX(-250px);
  transform: rotate(-290deg) translateX(-250px);
}
.image.back {
  z-index: 1;
}
  </style>




Ahora, cada vez que queramos mostrar esta presentacion, agregamos el siguiente codigo, añadiendo las urls de las imagenes.

<div class="images">
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
  <img class="image" src="URL DE LA IMAGEN" style="border:8px solid #ffffff;"/>
</div>