js無縫滾動原理及詳解[轉自剎那芳華]


剛剛接觸JS,網上找了一些關於無縫滾動的教程,但都大同小異,對我這種新手來說也只是會用,不知道什么意思,想要自己寫個更是一頭霧水.於是找了一些資料,詳細說明一下JS無縫滾動的原理,相信看過這篇文章之后,自己寫一個滾動效果不會是什么難題了.
    本文以CSS+div+js為例,詳細說明無縫滾動實現原理.
    首先建立四個層(div).

    結構如下:






    id="a"(以下簡稱a,id="b"簡稱為b)為輪播的可視部分,b為輪播部分,b_1為輪播內容,但b_2和b_1要在同一行上,因為輪播的原理就是利用scrollLeft不斷累加的方式實現,當b_2滾動完的時候,從b_1開始繼續滾動。

    下面介紹一下代碼里(代碼可以在網上找,也可以用本文的代碼。)的各種參數的意思:
    其實每個代碼都大同小易

 1 <script type="text/javascript" language="javascript">
 2 
 3     var x=document.getElementById("a");
 4      //自定義變量x,getElementById是通過id獲取對象。你可以理解為:將document.getElementById("a")
 5      //這段代碼縮寫為x了。這里的x你可以隨便換。在這里不定義x也行不過后面的代碼會麻煩點。
 6 
 7     var y=document.getElementByIdx_x("b_1");
 8     var z=document.getElementByIdx_x("b_2");
 9         function test() {
10         //自定義函數test,test可以隨便換,值為空。
11 
12         if (x.scrollLeft>=z.offsetWidth)
13          //如果,x的scrollLeft值大於等於z的offsetWidth。
14          //scrollLeft的值也就是scrollbar移動的值,
15          //offsetWidth是對象可視寬度。也就是z包括邊框在內的寬度,因為y和z的寬度是一樣的
16          //所以,你這里可以把z改成y,或者直接改成z的寬度效果是一樣的
17 
18             x.scrollLeft-=y.offsetWidth;
19             //scrollLeft:代表頁面利用滾動條滾動到右側時,隱藏在滾動條左側的頁面的寬度,x的scrollLeft值等於x的scrollLeft值減去y的offsetWidth值。
20             //其實當y完全滾動完成的時候,x的scrollLeft值和y的offsetWidth值是相等的。
21             //所以這段代碼意思就是x.scrollLeft=0 。
22             //這里y.offsetWidth你可以換成z.offserWidth或者y的寬度值,如果換成零,去掉減號。
23             //看到這里你也許會有點明白了吧?無縫滾動,其實就是不斷重復滾動第一個層.
24             //當b_1滾動的時候,如果沒有"雙胞胎"的b_2,滾動的時候將顯示一個b_1寬的空白
25 
26         else{
27         //否則
28 
29             x.scrollLeft++;
30             //x的scrollLeft值累加,實現移動
31 
32         }
33         }
34 
35     var run = setInterval(test,1);
36     //自定義run,setInter是在規定的時間內重復調用函數,直到用clearInterval終止
37     //這句代碼的意思是,每1毫秒執行一次test,每隔1毫秒x的scrollLeft值加1
38     //所以數值越大滾動越慢
39 
40     x.onmouseover=function() {clearInterval(run)};
41     //當鼠標划過x的時候,終止run。滾動停止
42 
43     x.onmouseout=function() {run=setInterval(test,1)};
44     //當鼠標離開x,繼續執行test,時間為1毫秒。
45 
46     </script>

   

注:<div class="b_1">和<div class="b_2">要有 "float:left;"屬性,寬和高可以根據內容自定。<div id="b">的寬度要大於<div id="a">否則將不能滾動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM