js實現滾動效果
阿新 • • 發佈:2018-10-19
ul li border float ack col 原理 tag absolute func
滾動效果通過setInterval定時函數去實現的,setInterval定時讓ul每過一段時間就移動,移動其實是left的值在變大,讓ul移動的必須讓這個div是絕對定位的,這樣left屬性就會起效果,然後讓div的left值越來越大,這樣ul就在移動。實現移動後復制ul,讓後面的1234隱藏起來,這樣當前面的方塊1消失,會從後面的方塊1裏出現,但是當後面的方塊全走完,發現看不到滾動。這裏就需要我們做一些處理了,當後面的方塊1滾到最左邊的時候,前面的1234其實是全消失了的。這時我們就把方塊重頭再滾,每當後面的方塊1滾動最左邊就相當於重置,這樣就實現了無限滾動了
實現原理的草圖
代碼如下
<html> <head> <title></title> </head> <style> *{ margin:0px; padding:0px; } #div1{ height:100px; width:400px; margin-left:100px; position:relative; background:black; overflow:hidden; } #div1 ul{ left:0px; top:0px; position:absolute; } #div1 ul li{float:left; width:100px; height:100px; background:yellow; list-style:none; //border:1px solid #ccc; } </style> <script> window.onload=function(){ var oDiv=document.getElementById(‘div1‘) //獲取到divvar oUl=oDiv.getElementsByTagName(‘ul‘)[0] //獲取到ul oUl.innerHTML=oUl.innerHTML+oUl.innerHTML //實際上是把ul內容復制了一份,會出現8個li,復制出來的li隱藏超出了div的長度,隱藏起來了 oUl.style.width=oUl.offsetWidth+oUl.offsetWidth //把ul長度設置為2倍,因為復制了ul setInterval(function(){ if(oUl.offsetLeft<=-oUl.offsetWidth/2){ //當最後方塊1滾動最左邊的時候,就把ul還原,重新滾動,這是實現無限滾動最重要的判斷 oUl.style.left=‘0‘; } oUl.style.left=oUl.offsetLeft-2+‘px‘ //每過40毫秒left值減2,這樣就會一直往左移動 },40) } </script> <body> <div id="div1"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </div> </body> </html>
js實現滾動效果