
如何使用javascript制作图片的无缝滚动效果呢?首先我说一下思路,这里我定义2个div容器,一个是demo1,一个是demo2, 我的目标是demo1从最初点开始向左匀速滚动,当滚动到demo1的最后一张图片的时候,使用偏移距离,让demo1重新开始滚动, 这样便达成了无缝滚动效果,那么有一个问题就是demo1向左滚动的时候demo1滚动剩余的宽度小于整个滚动效果宽度的时候,这样右侧便出现了空白距离。会很难看自然达不到无缝滚动的效果。那么怎么办呢,所以我定义了一个demo2, 我们把节点demo1中的html内容复制一份到节点demo2中,当demo1向左滚动的剩余宽度小于整个滚动效果宽度的时候让demo2紧紧跟着demo1向左滚动,当demo1滚动完以后,立刻让demo1重新滚动 这样便达到了图片无缝滚动效果

关键技术点
计时器调用滚动的方法,达到匀速滚动效果
节点demo1中的html内容复制到节点demo2中
javascript对demo1与demo2交界位置的判断
overflow:hidden 对溢出部分的隐藏,隐藏超出部分的内容,防止其显示在容器之外。
鼠标移入移出对效果的影响
关键代码与说明
<script> //无缝滚动 var speed = 20; //数字越大速度越慢 var tab = document.getElementById("demo"); //根据id获取元素 var tab1 = document.getElementById("demo1"); //根据id获取元素 var tab2 = document.getElementById("demo2"); //根据id获取元素 tab2.innerHTML = tab1.innerHTML; //把节点tab1中的html内容复制一份到节点tab2中 function Marquee() { ///当滚动至demo1与demo2交界时 if (tab2.offsetWidth - tab.scrollLeft <= 0) //偏移距离,下面滚动条,返回到原处 tab.scrollLeft -= tab1.offsetWidth else { //继续做滚动 tab.scrollLeft++; } } //定义计时器每20毫秒调用Marquee一次 var MyMar = setInterval(Marquee, speed); //鼠标移上时清除定时器达到滚动停止的目的 tab.onmouseover = function () { clearInterval(MyMar) }; //鼠标移开时重设定时器 tab.onmouseout = function () { MyMar = setInterval(Marquee, speed) }; </script>
当鼠标移上时清除定时器达到滚动停止的目的,当鼠标移开时重设定时器继续滚动,speed数字越大滚动速度就会越慢,最重要的一点要知道demo2并不参与到滚动,它只是填补了demo1滚动后的空白位置。