原生JS运动实现轮播图
原生JS运动实现轮播图
**基本原理:**通过控制包含n张图片的ul的left值来实现图片自动运动的效果,其中列表中li元素的个数为n,第一个li和最后一个li里存放的图片应为同一张图片,当图片运动到最后一张时,将ul的left值设为0,即可达到图片无线轮播的效果。
运动函数的实现
函数需传入元素(即需要参与运动的元素)、目标值(以对象的形式呈现,如{left:300})、callback(回调函数)。
//多物体多值运动+回调机制 functionstartMove(dom,attrObj,callback){ varkey=true; variSpeed=null, iCur=null; clearInterval(dom.timer); if(key){ dom.timer=setInterval(function(){ //bStop用来判断是否开始执行回调函数 varbStop=true; //判断传入目标值中的“键”类型是否为opacity for(varattrinattrObj){ //若要改变的样式为opacity,则将元素的opacity扩大100被进行操作 if(attr==='opacity'){ iCur=parseFloat(getStyle(dom,attr))*100; }else{ iCur=parseInt(getStyle(dom,attr)); } //运动速度设为目标值减去当前值的一半,即当前状态离目标值越接近,运动速度越小 iSpeed=(attrObj[attr]-iCur)/2; //对速度进行取整 iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed); if(attr==='opacity'){ dom.style.opacity=(iCur+iSpeed)/100; }else{ dom.style[attr]=iCur+iSpeed+'px'; } if(iCur!==attrObj[attr]){ bStop=false; } } //当bStop为true时,元素的所有样式均已达到目标值,清理定时器并执行回调函数 if(bStop){ clearInterval(dom.timer); typeofcallback=='function'&&callback(); } },30) } if(!key){ } } //用来获取元素实时的样式值 functiongetStyle(elem,prop){ if(window.getComputedStyle){ returnwindow.getComputedStyle(elem,null)[prop]; } }
HTML部分
HTML中包含一个div,用来显示当前要播放的图片,该div中又包含一个ul(用来存放所有包含图片的li)、三个div(其中两个充当图片左右切换的按钮,第三个存放图片索引点,通过点击索引也可切换到要查看的图片),代码如下:
<