1. 程式人生 > >js實現滾動效果

js實現滾動效果

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‘) //獲取到div
var 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實現滾動效果