幻灯片/轮播

jQuery和CSS3超酷三面板幻灯片特效

阿里云

这是一款效果非常酷的 jQuery 和 CSS3 三面板幻灯片特效插件。该幻灯片插件将一张图片分割为三部分,在幻灯片切换的时候,图片的每一部分都从不同方向进入显示,效果非常不错。你可以使用左右导航箭头或下面的原点导航来控制幻灯片图片的切换。该幻灯片被设计为可以加载无限图片的模式,所以你可以任意添加你想要播放的图片的数量。

HTML 结构:

该幻灯片插件在 HTML 结构中,使用#slider-panels 来包裹图片的三个面板。请注意#slider-dots,.slider-panel-left-carousel-tab,.slider-panel-center-carousel-tab,.slider-panel-right-carousel-tab 这几个元素并不是直接写在 HTML 文件上的,而是通过 jQuery 来动态插入的。

也想出现在这里?联系我们
创客主机
  1. <div id="slider">
  2.   <div id="slider-panels">
  3.     <div id="slider-panels-next"><span class="iconb" data-icon=""></span></div>
  4.     <div id="slider-panels-previous"><span class="iconb" data-icon=""></span></div>
  5.     <div id="slider-panel-images">
  6.       <img src="_assets/1.jpg" width="900" height="400" />
  7.       <img src="_assets/2.jpg" width="900" height="400" />
  8.     </div>
  9.  
  10.     <div id="slider-panel-left">
  11.       <div id="slider-panel-left-carousel">
  12.         <div class="slider-panel-left-carousel-tab"><img src="_assets/1.jpg" width="900" height="400" /></div>
  13.         <div class="slider-panel-left-carousel-tab"><img src="_assets/2.jpg" width="900" height="400" /></div>
  14.       </div>
  15.     </div>
  16.  
  17.     <div id="slider-panel-center">
  18.       <div id="slider-panel-center-carousel">
  19.         <div class="slider-panel-center-carousel-tab"><img src="_assets/1.jpg" width="900" height="400" /></div>
  20.         <div class="slider-panel-center-carousel-tab"><img src="_assets/2.jpg" width="900" height="400" /></div>
  21.       </div>
  22.     </div>
  23.  
  24.     <div id="slider-panel-right">
  25.       <div id="slider-panel-right-carousel">
  26.         <div class="slider-panel-right-carousel-tab"><img src="_assets/1.jpg" width="900" height="400" /></div>
  27.         <div class="slider-panel-right-carousel-tab"><img src="_assets/2.jpg" width="900" height="400" /></div>
  28.       </div>
  29.     </div>
  30.   </div>
  31.   <div id="slider-dots">
  32.     <div class="slider-dot slider-dot-current"></div>
  33.     <div class="slider-dot"></div>
  34.   </div>
  35. </div>

CSS 样式:

这个效果并没有使用响应式的设计,所以每个元素都是固定大小的。最外围的包裹元素##slider 的样式如下:

  1. #slider{
  2.   width: 1000px;
  3.   margin-top: 200px;
  4.   margin-right: auto;
  5.   margin-left: auto;
  6. }               
  7.  
  8. #slider包裹着div#slider-panels,它下面又包裹着三个面板,它们的样式如下:
  9. #slider-panels{
  10.   float: left;
  11.   height: 400px;
  12.   width: 1000px;
  13.   position: relative;
  14. }
  15. #slider-dots{
  16.   height: 50px;
  17.   margin-right: auto;
  18.   margin-left: auto;
  19.   width: 135px;
  20. }
  21. .slider-dot{
  22.   float: left;
  23.   height: 12px;
  24.   width: 12px;
  25.   margin-top: 36px;
  26.   margin-right: 12px;
  27.   -webkit-transition: background 0.5s;
  28.   -moz-transition: background 0.5s;
  29.   -o-transition: background 0.5s;
  30.   transition: background 0.5s;
  31.   -moz-border-radius: 50% 50% 50% 50%;
  32.   -webkit-border-radius: 50% 50% 50% 50%;
  33.   border-radius: 50% 50% 50% 50%;
  34.   -khtml-border-radius: 50% 50% 50% 50%;
  35.   border: 1px solid rgba(0,147,253,1);
  36. }
  37. .slider-dot:hover {
  38.   background-color: rgba(0,147,253,0.5);
  39.   cursor: pointer;
  40. }
  41. .slider-dot-current {
  42.   background-color: rgba(0,147,253,0.8);
  43. }

在后面会使用 jQuery 来为每一幅图片都复制一个.slider-dot 的 class,在.slider-dot 中还为背景添加了 CSS 过渡效果,是鼠标在滑过它们时,背景能够平滑的过渡。.slider-dot-current 是当前显示的圆点,它会被添加到.slider-dot 上。在#slider-panel-images 中放置的是幻灯片的图片。这些图片需要 900 像素的宽度和 400 像素的高度。#slider-panel-images 被设置为不可见,因为我们不需要它来显示图片。

  1. #slider-panel-images{
  2.   display: none;
  3. }

下面要来看看最重要的图片的三个面板样式。它们分别是#slider-panel-left、#slider-panel-right 和#slider-panel-center。每一个面板中都有一个用于存放图片的 div。例如左边面板中有一个#slider-panel-left-carousel,它的定位设置为绝对定位,后面会用 js 来控制它的位置到#slider-panel-left 里面。为了达到每个面板显示不同图片部分的效果,还需要在#slider-panel-left-carousel 中在添加一个.slider-panel-left-carousel-tab,它用于复制每一幅图片。因为我们只是要显示图片的一部分,而不是全部的图片。例如衣服图片 900 像素宽,400 像素高,在左边面板中,使用.slider-panel-left-carousel-tab 来显示图片的 300 像素宽度的部分,余下的部分使用 overflow: hidden 来隐藏它们。

  1. #slider-panel-left{
  2.   float: left;
  3.   height: 400px;
  4.   width: 300px;
  5.   overflow: hidden;
  6.   position: relative;
  7. }
  8. #slider-panel-left-carousel{
  9.   height: 400px;
  10.   width: 0px;
  11.   position: absolute;
  12.   top: 0px;
  13.   right: 0px;
  14. }
  15. .slider-panel-left-carousel-tab{
  16.   float: right;
  17.   height: 400px;
  18.   width: 300px;
  19.   overflow: hidden;
  20.   text-align: left;
  21.   position: relative;
  22. }
  23. .slider-panel-left-carousel-tab img {
  24.   float: left;
  25.   height: 400px;
  26.   width: 900px;
  27.   position: absolute;
  28.   top: 0px;
  29.   left: 0px;
  30. }
  31. #slider-panel-center{
  32.   float: left;
  33.   height: 400px;
  34.   width: 300px;
  35.   margin-left: 50px;
  36.   overflow: hidden;
  37.   position: relative;
  38. }
  39. #slider-panel-center-carousel{
  40.   height: 0px;
  41.   width: 300px;
  42.   position: absolute;
  43.   top: 0px;
  44.   left: 0px;
  45. }
  46. .slider-panel-center-carousel-tab{
  47.   float: left;
  48.   height: 400px;
  49.   width: 300px;
  50.   overflow: hidden;
  51.   text-align: left;
  52.   position: relative;
  53. }
  54. .slider-panel-center-carousel-tab img{
  55.   float: left;
  56.   height: 400px;
  57.   width: 900px;
  58.   position: absolute;
  59.   top: 0px;
  60.   left: -400px;
  61.   }
  62. #slider-panel-right{
  63.   float: left;
  64.   height: 400px;
  65.   width: 300px;
  66.   margin-left: 50px;
  67.   overflow: hidden;
  68.   position: relative;
  69. }
  70. #slider-panel-right-carousel{
  71.   height: 400px;
  72.   width: 0px;
  73.   position: absolute;
  74.   top: 0px;
  75.   right: 0px;
  76. }
  77. .slider-panel-right-carousel-tab{
  78.   float: left;
  79.   height: 400px;
  80.   width: 300px;
  81.   overflow: hidden;
  82.   text-align: left;
  83.   position: relative;
  84. }
  85. .slider-panel-right-carousel-tab img {
  86.   float: left;
  87.   height: 400px;
  88.   width: 900px;
  89.   position: absolute;
  90.   top: 0px;
  91.   right: 0px;
  92. }

你会发现上面的代码中#slider-panel-left-carousel 和#slider-panel-right-carousel 的宽度设置为 0,以及#slider-panel-center-carousel 的高度设置为 0,原因是这些值会在后面使用 jQuery 来设置它们,使它们匹配所有的图片。

JAVASCRIPT:

首先来设置一些变量,这会使得后面的控制更为方便。

  1. var slideTiming = 10000; 
  2. var animationTime = 500;
  3. var controlsHideTime = 200; 
  4. var current = 1;

slideTiming 变量用于控制幻灯片的切换速度。animationTime 变量是动画持续的时间。controlsHideTime 变量是控制前后导航按钮的隐藏时间。current 变量代表当前的图片。接下来是鼠标滑过时箭头导航按钮的事件:

  1. $("#slider-panels-next").hide();
  2. $("#slider-panels-previous").hide();
  3.  
  4. $("#slider-panels").hover(function(){
  5.   $("#slider-panels-next").show("drop", { direction: "right" }, controlsHideTime);
  6.   $("#slider-panels-previous").show("drop", { direction: "left" }, controlsHideTime);
  7.   },function(){
  8.     $("#slider-panels-next").hide("drop", { direction: "right" }, controlsHideTime);
  9.     $("#slider-panels-previous").hide("drop", { direction: "left" }, controlsHideTime);
  10. });

插件中使用 check_slide()来检测当前的位置和使幻灯片动起来。左边的面板从左向右运动,使用 animate 函数,并设置为负值。这个值是提供给 current 变量的幻灯片图片设置宽度值。

  1. function check_slide(){
  2.   $("#slider-panel-left-carousel").animate({"right": -(300*(current-1))}, animationTime, "easeInOutExpo");
  3.   $("#slider-panel-center-carousel").animate({"top": -(400*(current-1))}, animationTime, "easeInOutExpo");
  4.   $("#slider-panel-right-carousel").animate({"left": -(300*(current-1))}, animationTime, "easeInOutExpo");    
  5.   $('.slider-dot').removeClass('slider-dot-current');
  6.   $('.slider-dot[data-slide="'+current+'"]').addClass('slider-dot-current');
  7. }

下面的函数用于在点击箭头导航按钮或圆点导航按钮的时候导航到相应的图片上:

  1. function nextslide() {if(current==total_slides){current = 1}else{current++} check_slide();}
  2. function previousslide() {if(current==1){current = total_slides}else{current--} check_slide();}  
  3. $("#slider-panels-next").click(function() {nextslide();});
  4. $("#slider-panels-previous").click(function() {previousslide();});

通过 setInterval 来使幻灯片可以自动播放。

  1. var refreshIntervalId = setInterval(nextslide, slideTiming);

接下来需要调整三个面板的尺寸来填充适当的图片。左右两个面板需啊哟修改宽度,中间的面板需要修改高度。同时还要修改#slider-dots 的宽度,因为不为它设置宽度它就不能居中显示。

  1. var total_slides = 0;
  2.   $("#slider-panel-images img").each(function() {
  3.   total_slides++;
  4.   $("#slider-panel-left-carousel").append('<div class="slider-panel-left-carousel-tab"><img src="'+$(this).attr('src')+'" width="'+$(this).attr('width')+'" height="'+$(this).attr('height')+'"></div>');
  5.   $("#slider-panel-center-carousel").append('<div class="slider-panel-center-carousel-tab"><img src="'+$(this).attr('src')+'" width="'+$(this).attr('width')+'" height="'+$(this).attr('height')+'"></div>');
  6.   $("#slider-panel-right-carousel").append('<div class="slider-panel-right-carousel-tab"><img src="'+$(this).attr('src')+'" width="'+$(this).attr('width')+'" height="'+$(this).attr('height')+'"></div>');
  7.   $("#slider-dots").append('<div class="slider-dot" data-slide="'+total_slides+'"></div>');
  8.   $("#slider-panel-left-carousel").css('width',(300*total_slides));
  9.   $("#slider-panel-right-carousel").css('width',(300*total_slides));
  10.   $("#slider-panel-center-carousel").css('height',(400*total_slides));
  11.   $("#slider-dots").css('width',(total_slides*26));
  12. });

最后,需要在点击.slider-dot 的时候做出相应的动作。通过将当前元素的 data-slide 属性的值赋予 current 变量,然后调用 check_slide()方法来实现。

  1. $(".slider-dot").click(function() { current = $(this).attr('data-slide'); check_slide();  });
  2. check_slide();

jQuery 和 CSS3 超酷三面板幻灯片特效

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

演示地址 下载地址
收藏
(0)

发表回复

热销模板

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

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