本文记录的是在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;
});
}