幻灯片/轮播

jQuery和CSS3炫酷3D翻转图片幻灯片插件

阿里云

这是一款效果非常炫酷的 jQuery 和 CSS3 3d 翻转图片幻灯片插件。这个幻灯片插件开始的时候图片都堆叠在一起,当用户点击了其中的某张图片后,该图片会以 3D 翻转的方式“飞”到堆叠图片的最前面。

插件设计:

该幻灯片插件以堆叠栈的方式来排列图片,所有的图片都会以平滑的方式定位在堆叠栈的指定位置,如下图所示:

当用户点击了其中的某张图片,该图片先移动到左边,然后在 3D 翻转到栈的顶部:

也想出现在这里?联系我们
创客主机

HTML 结构:

该图片 3D 翻转幻灯片的 HTML 结构非常简单,需要两个[div]来分别包裹图片和它们的描述。分别给这两个[div]设置 class 为 itemlist 和 itemdescription。

  1. <div id="container">  
  2.     <div id="itemlist">
  3.       <img src="images/1.jpg" alt="Pasture" id="Pasture" />
  4.       <img src="images/2.jpg" alt="dream" id="dream" />
  5.       <!-- to n image -->
  6.     </div>
  7.     <div id="itemdescription">
  8.       <span data-for="Pasture">Where is the wind</span>
  9.       <span data-for="dream">Tell a story</span>
  10.       <!-- to n description -->
  11.     </div>
  12. </div>

幻灯片中每一张图片都有一个 id 属性和图片描述的 data-for 属性相对应。

CSS 样式:

因为该幻灯片插件使用的是栈结构,需要将图片 absolute 定位,并使用 left 属性来保证每张图片都可见。同时为了美观,还使用了 transform scale。

  1. #itemdescription {  
  2.   position: relative;  
  3.   width: 400px;  
  4.   margin: 0 auto;  
  5.   left: 6em;  
  6.   top: 2em;  
  7. }  
  8.  
  9.   #itemdescription span {  
  10.     display: none;  
  11.   }  
  12.  
  13. #itemlist {  
  14.   display: block;  
  15.   width: 400px;  
  16.   margin: 3em auto;  
  17.   position: relative;  
  18.   transform-style: preserve-3d;  
  19. }  
  20.  
  21. #itemlist img {  
  22.   position: absolute;  
  23.   cursor: pointer;  
  24.   left: 0;  
  25.   box-shadow: 0px 15px 50px rgba(0,0,0,0.4);  
  26. }  
  27.  
  28.   #itemlist img:hover {  
  29.     top: -5px;  
  30.   }  
  31.  
  32. #itemlist img.item-0 {  
  33.   z-index: 4;  
  34.   transform: scale(1);  
  35. }  
  36.  
  37. #itemlist img.item-1 {  
  38.   z-index: 3;  
  39.   left: -80px;  
  40.   transform: scale(0.9);  
  41. }  
  42.  
  43. #itemlist img.item-2 {  
  44.   z-index: 2;  
  45.   left: -160px;  
  46.   transform: scale(0.8);  
  47. }  
  48.  
  49. #itemlist img.item-3 {  
  50.   z-index: 1;  
  51.   left: -240px;  
  52.   transform: scale(0.7);  
  53. }

在幻灯片的每张图片上都需要一个 transition 属性来使图片平滑的过渡,插件中使用一个单独的 class .transition。为了制作动画效果,插件中还使用了.show class,这个 class 通过关键帧来使图片执行翻转动画。

  1. .transition {  
  2.   transition: 0.5s ease-out;  
  3. }  
  4.  
  5. .show {  
  6.   animation: show 1s linear;  
  7. }  
  8.  
  9. @keyframes show{  
  10.   25% {  
  11.     left: -450px;  
  12.   }  
  13.  
  14.   50% {  
  15.     z-index: 5;  
  16.     left: -500px;  
  17.     transform: rotate3d(0,1,0,0deg);  
  18.   }  
  19.  
  20.   70% {  
  21.     z-index: 5;  
  22.     left: -250px;  
  23.     transform: rotate3d(0,1,0,180deg);  
  24.   }  
  25.  
  26.   100% {  
  27.     z-index: 5;  
  28.     left: 0px;  
  29.     transform: rotate3d(0,1,0,360deg);  
  30.   }  
  31. }

jQuery 代码:

首先要做的是遍历图像列表自动排序,插件中基于 DOM 元素的顺序将图片都添加到 item 对象中,并隐藏所有的图片描述,只显示第一幅图片的描述。

  1. //Initiliaze  
  2. var itemList, item, className, thisItem, newOrder, itemDesc, desc;  
  3.  
  4. itemList= $('#itemlist');  
  5. item= itemList.children('img');  
  6.  
  7. itemDesc= $('#itemdescription');  
  8. desc= itemDesc.children('span');  
  9.  
  10. //Add class name for each item  
  11. item.each(function(index) {  
  12.  
  13.   className= 'item-' + index;  
  14.   $(this).addClass(className).attr('data-order', index);  
  15. });  
  16.  
  17. //Show first item description  
  18. desc.filter(':first-child').fadeIn();

当幻灯片图片被点击后,该图片将会被添加 class .show 来使该图片执行相应的动画。当动画结束,将显示该图片的描述,并改变它的排序 data-order 属性:

  1. //On clicked fire animation  
  2. item.on('click', function() {  
  3.  
  4.   thisItem= $(this);  
  5.   thisOrder = parseInt(thisItem.attr('data-order')) - 1;  
  6.  
  7.   thisItem.addClass('show');  
  8.  
  9.   //Reorder item position  
  10.   item.on('animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd', function() {   
  11.  
  12.     thisItem.removeClass().addClass('item-0').attr('data-order', '0');  
  13.  
  14.     //Show selected item description  
  15.     desc.hide();  
  16.     desc.filter('[data-for=' + thisItem.attr('id') + ']' ).fadeIn('fast');  
  17.   });

在幻灯片被点击图片动画的时候,插件会移动它后面的图片,改变它们的排列顺序。同时为它们添加 transition 属性来使它们平滑动画,最后,动画结束时将移除 transition 属性。

  1. //Move siblings items backward  
  2. window.setTimeout(function () {  
  3.  
  4.   for(var i = thisOrder; i >= 0; i--) {  
  5.  
  6.     //Reorder item position  
  7.     movedItem = item.filter('[data-order=' + i + ']');  
  8.     newOrder= parseInt(movedItem.attr('data-order')) + 1;  
  9.     className = 'item-' + newOrder;  
  10.  
  11.     //Move them with transition  
  12.     movedItem.removeClass().addClass('transition ' + className).attr('data-order', newOrder);  
  13.  
  14.     //Remove their transition  
  15.     item.on('transitionend webkitTransitionEnd MSTransitionEnd oTransitionEnd', function() {   
  16.       item.removeClass('transition');  
  17.     });  
  18.   }  
  19. }, 500);

jQuery 和 CSS3 炫酷 3D 翻转图片幻灯片插件

已有 374 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!