无缝切换轮播图

轮播图大家都写过,但是怎么做到无缝切换对新手来说是个难点。
曾经也困惑了我很久,一直在研究,方法也很多,但是总是没有找到简便合适的。下面介绍一种。

html部分:

<div class="box">

  <ul>

    <li><img src="images/pic_01.jpg" width="630" height="210"></li>

    <li><img src="images/pic_02.jpg"  width="630" height="210"></li>

    <li><img src="images/pic_03.jpg"  width="630" height="210"></li>

    <li><img src="images/pic_04.jpg"  width="630" height="210"></li>

    <li><img src="images/pic_05.jpg"  width="630" height="210"></li>

  </ul>

  <a href="#" class="prev"><img src="images/arrow-prev.png" border="0"></a> 

  <a href="#" class="next"><img src="images/arrow-next.png" border="0"></a>

</div>

css部分:

.box{margin:0 auto; width:630px; height:210px;  position:relative; overflow:hidden;}

.box ul{list-style-type:none; padding:0; margin:0; position:absolute; top:0;left:0;  height:210px; }

.box li{float:left; width:630px;}

.prev{position:absolute; left:-2px; top:84px; }

.next{position:absolute; right:-2px; top:84px;}

js部分:

 $(function(){

     var w=630;

      var l=0;

      var timer=null;

      var len=$("ul li").length*2; //复制了一份图片,长度要设原来的2倍。
      // 页面一加载,就把ul定位到第二份的第一张图片

      //当图片位置到第一份图片第二张时,马上把图片定位到第二份的第一张,图片位置到最后一张时(第二份最后一张)时,就把图片定位到第一份最后一张,

     $("ul").append($("ul").html()).css({'width':len*w, 'left': -len*w/2});



   timer=setInterval(auto,5000);

    function auto(){

         $(".box .next").trigger('click');
    }

    $("ul li").hover(function(){

         clearInterval(timer);

        },function(){

            timer=setInterval(auto,5000);

       });


          $(".prev").click(function(){
              l=parseInt($("ul").css("left"))+w;  //这里要转成整数,因为后面带了px单位

             showCurrent(l); 

          });

          $(".next").click(function(){

             l=parseInt($("ul").css("left"))-w;  

             showCurrent(l);

          });

       function showCurrent(l){     //把图片的左右切换封装成一个函数

       if($("ul").is(':animated')){ //当ul正在执行动画的过程中,阻止执行其它动作。关键之处,不然图片切换显示不完全,到最后图片空白不显示。

          return;

       }

          $("ul").animate({"left":l},500,function(){

                if(l==0){ //当图片位置到第一份图片第二张时,马上把图片定位到第二份的第一张。注意这里的设置的css一定到写在animate动画完成时的执行 ,一定 要用css。

               $("ul").css("left",-len*w/2);   



             }else if(l==(1-len)*w){ //图片位置到最后一张时(第二份最后一张)时,就把图片定位到第一份最后一张。从而显示的是第一份最后一张。

                 $("ul").css('left',(1-len/2)*w); 

                }

            });       

         }



      });   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值