oUl.style.left = oUl.offsetLeft + speed + "px";上面的代码中speed就是每次产生的位移。关于speed使用还挺有意思的:我们可以修改speed的正负值来修改滚动的方向。

这样当第一张图片1滚动出边框时,后面的图片1则出现在图片4的后面,这样效果看起来就和循环一样~
当图片滚动到下面的这种情况时:

继续滚动就会导致图片后面出现空白,就不是循环滚动的效果了,其实这点也是程序的关键所在,每当图片滚动到图(2)这种情况时,就应该让图片重新回到图(1)那种状态再继续滚动,这样的话就形成了无缝循环滚动的效果。
另外拓展一下程序写了鼠标移入图片停止滚动,移出继续滚动的效果,就是利用消除定时器的方法实现的,代码很简单就不介绍了。还有我为了样式好看一点,把图片都设置为160*120的尺寸使用的,大家运行代码是需要自己准备图片。
代码如下:
<html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>*{margin: 0;padding: 0;}#div1{width: 640px;height: 120px;margin: 100px auto;background-color: #646464;position: relative;overflow: hidden;}#div1 ul{position:absolute;left:0;top:0;overflow: hidden;background-color: #3b7796;}#div1 ul li{float: left;width: 160px;height: 120px;list-style: none;}</style><script>window.onload = function(){var oDiv = document.getElementById("div1");var oUl = document.getElementById("ul1");var speed = 2;//初始化速度oUl.innerHTML += oUl.innerHTML;//图片内容*2-----参考图(2)var oLi= document.getElementsByTagName("li");oUl.style.width = oLi.length*160+"px";//设置ul的宽度使图片可以放下var oBtn1 = document.getElementById("btn1");var oBtn2 = document.getElementById("btn2");function move(){if(oUl.offsetLeft<-(oUl.offsetWidth/2)){//向左滚动,当靠左的图4移出边框时oUl.style.left = 0;}if(oUl.offsetLeft > 0){//向右滚动,当靠右的图1移出边框时oUl.style.left = -(oUl.offsetWidth/2)+"px";}oUl.style.left = oUl.offsetLeft + speed + "px";}oBtn1.addEventListener("click",function(){speed = -2;},false);oBtn2.addEventListener("click",function(){speed = 2;},false);var timer = setInterval(move,30);//全局变量 ,保存返回的定时器oDiv.addEventListener("mouseout", function () {timer = setInterval(move,30);},false);oDiv.addEventListener("mousemove", function () {clearInterval(timer);//鼠标移入清除定时器},false);}</script></head><body><input id="btn1" type="button" value="向左"><input id="btn2" type="button" value="向右"><div id="div1"><ul id="ul1"><li><img src="img/img_1.jpg"></li><li><img src="img/img_2.jpg"></li><li><img src="img/img_3.jpg"></li><li><img src="img/img_4.jpg"></li></ul></div></body></html>以上就是js实现无缝滚动特效的详细代码,希望对大家的学习有所帮助。