js-无缝滚动-双图切换

      本文记录的是在html中写两个img实现多张图片的无缝滚动。
html结构如下:

<div class="wrap">
    <ul class="list">
        <li>
            <img src="img/img0.png">
        </li>
         <li>
            <img src="img/img1.png">
        </li>
    </ul>
    <a href="javascript:;" class="prev">prev</a>
    <a href="javascript:;" class="next">next</a>
</div>

      css样式不再详述,想要使图片位置发生变化,方法有很多。此次用的是定位,修改.list的left值。

      js代码如下:

(function(){
    var list=document.querySelector(".list");
    var imgs=document.querySelectorAll("img");
    var prev=document.querySelector(".prev");
    var next=document.querySelector(".next");
    var imgW=css(imgs[0],"width");//使用封装好的css()获取img的宽度
    var now=0;
    var imgData=["img/img0.png",
                 "img/img1.png",
                 "img/img2.png",
                 "img/img3.png",];
    prev.onclick=function(){
        //找出接下来要显示的图片的下标
        var prev=(now-1+imgData.length)%imgData.length;
        //因为是从右往左运动,当前显示的应在右侧,即将显示的在左侧
        imgs[0].src=imgData[prev];
        imgs[1].src=imgData[now];
        //使用封装好的css()设置list的位置
        css(list,"left",-imgW);
        //使用封装好的运动函数来控制图片移动
        startMove(list,{left:0},2000,"easeOut");
        now=prev;
    }
    next.onclick=function(){
        var next=(now+1)%imgData.length;
        imgs[0].src=imgData[now];
        imgs[1].src=imgData[next];
        css(list,"left",0);
        startMove(list,{left:-imgW},2000,"easeOut");
        now=next;
    }
})();

      到这一步,大体功能已经实现。但是当频繁点击上一张/下一张按钮时,会发现图片在设定的运动时间闪换。解决这个问题有两个办法:1.减小运动时间,如将2000ms改为500ms,2.限定定时器只能开一个。

      在上述js代码基础上增加以下代码,以上一张操作为例,增加定时器个数判断。


var isMove=false;//记录定时器开关状态
prev.onclick=function(){
    if(isMove){
        return;
    }
    ....上述上一张操作js代码
    isMove=true;
    startMove(list,{left:-imgW},2000,"easeOut",function(){
      isMove=false;  
    });
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值