首先应该区分样式中的绝对定位和相对定位,一般来说,移动的单位为绝对定位,在这个实例中,移动的Ul就是绝对定位 ,否则它根本无法滚动,而它相对于div1滚动 ,则div1就作为他的相对定位。
oUl.innerHTML=oUl.innerHTML+oUl.innerHTML;这段代码是实现无缝滚动的核心,使之可以在不论左右滚动的时候都有下一步图片接上去。
在操作或者进行比较的时候,都要用offset取值来进行操作或者比较!!!
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>无缝滚动2</title> <style type="text/css"> *{ padding: 0; margin:0; } #div1{ position: relative; width: 800px; height: 200px; background:red; margin:100px auto; overflow: hidden; } #div1 ul{ position: absolute; left: 0; top: 0; } #div1 ul li{ float: left; list-style: none; width: 200px; height: 200px; } </style> <script type="text/javascript"> window.onload=function() { var oDiv = document.getElementById('div1'); var oUl = oDiv.getElementsByTagName('ul')[0]; var aLi = oDiv.getElementsByTagName('li'); var aA = document.getElementsByTagName('a'); var speed = 3; oUl.innerHTML=oUl.innerHTML+oUl.innerHTML; oUl.style.width=aLi.length*aLi[0].offsetWidth+'px'; var timer=setInterval(move,30); function move() { if (oUl.offsetLeft<=-oUl.offsetWidth/2) { oUl.style.left="0"; } if(oUl.offsetLeft>0){ oUl.style.left=-oUl.offsetWidth/2+'px'; } oUl.style.left=oUl.offsetLeft+speed+'px'; }; oDiv.onmouseover=function() { clearInterval(timer); }; oDiv.onmouseout=function() { timer=setInterval(move,30); }; aA[0].onclick=function() { speed=-3; }; aA[1].onclick=function() { speed=3; }; }; </script> </head> <body> <a href="javascript:;">向左</a> <a href="javascript:;">向右</a> <div> <ul> <li><img src="https://www.jb51.net/images/n1.jpg"></li> <li><img src="https://www.jb51.net/images/n2.jpg"></li> <li><img src="https://www.jb51.net/images/n3.jpg"></li> <li><img src="https://www.jb51.net/images/n4.jpg"></li> </ul> </div> </body> </html>