实现javascript的无缝滚动须要掌握基本的定位和运动知识
逐步分析图片的无缝滚动是怎么实现的
HTML的基本结构以下javascript
<div id='moving'> <ul> <li><img src='1.jpg' /></li> <li><img src='2.jpg' /></li> <li><img src='3.jpg' /></li> <li><img src='4.jpg' /></li> </ul> </div> <div id='control'> <input id='left' type="button" value="Left" /> <input type="button" id="stop" value="Stop" /> <input id='right' type="button" value="Right" /> </div>
CSS样式:java
#moving { width: 600px; height: 370px; background-color: #ccc; position: relative; margin: 30px auto 0; overflow: hidden; } #moving ul { position: absolute; left: 0; top: 0; } #moving ul li { list-style: none; float: left; } #control { width:300px; margin: 20px auto; } #control input { margin-left: 30px; width: 50px; }
要实现图片窗口总体的无缝滚动(咱们须要经过定时器定时改变<ul>的位置,因而咱们有下面的片断来实现:学习
oUl.style.left = oUl.offsetLeft + speed + 'px';
speed对应定时器时间段内移动的距离,oUl指ul
开始这样作能实现基本的运动,可是图片老是数量有限的,当最后一张图片滚动展现完毕后,后面就没有了内容。那么咱们如何克服这个困难,让滚动一直持续循环下去呢?
为了达到这种效果,咱们能够克隆一样的ul结构,而且拼接在一块儿,好比:code
oUl.innerHTML += oUl.innerHTML;
注意不要漏了在ul加入overflow:hidden,不然可能会两栏显示
可是这样作仍是不够的,图片总会播放完,可是咱们不可能复制成千上万分同样的ul结构
这时候须要一点小技巧
当左段ul(为了阐述方便,分为两段,左段为原始,右段为复制的那份)滚动完成,右段的开头即将离开图片窗口的时候,将整个ul拉回到原始位置。若是是向右运动,那么当左端的开头第一张图片到左边尽头时,整个ul拉回到起始位置seo
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'; }
如下是javascript部分图片
window.onload = function(){ var oMove = document.getElementById('moving'); var oUl = oMove.getElementsByTagName('ul')[0]; var aLi = oUl.getElementsByTagName('li'); var oCtr = document.getElementById('control'); var oLeft = document.getElementById('left'); var oRight = document.getElementById('right'); var speed = null; oUl.innerHTML += oUl.innerHTML; //两段同样的内容 oUl.style.width = aLi[0].offsetWidth*aLi.length + "px"; //两段ul宽度不够,第二段会掉下去 oLeft.onclick = function(){ return speed = -3; } oRight.onclick = function(){ return speed = 3; } 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'; } var timer = setInterval(move,30); oMove.onmouseover = function(){ clearInterval(timer); }; oMove.onmouseout = function(){ timer = setInterval(move,30); }; var btn = document.getElementById("stop"); btn.onclick = function(){ clearInterval(timer); //stop按键中止运动,若是在点击后将鼠标先移入图片再移出会从新开启 } }
以上是智能社课程学习内容ip