javascript實現圖片循環滾動效果


 

如圖,圖片實現無縫滾動,點擊向左向右滾動控制方向,且當鼠標懸浮在div中時,圖片停止滾動;當鼠標離開div中,圖片繼續滾動。

原理:復制一遍整個ul,給定一個速度讓ul向右或向左滾動,當整個ul要滾動到div邊界時,再將整個復制的ul向左或向右拖拽直至整個ul中的圖片歸位。

                                                                                                圖①

 

                                                                                                  圖②

 

                                                                                                    圖③

                                                                                                       圖④ 

                                                                                                       圖⑤

                                                                                                                                                                                                           

如圖圖片向左滾動,當運動到圖③位置時,offsetLeft就小於二分之一ul的寬度,此時將ul中的第一個圖片拉回到起點即圖①的位置;

同理當圖片向右滾動運動到圖④位置,此時在div內部的ul的offsetLeft就大於0,將ul中的第八個圖片拉回到原位即圖⑤的位置。

上代碼:

 

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta charset="utf-8">
  5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6 <title>無縫滾動,移入暫停</title>
  7 <style>
  8 body,div,ul,li,p
  9 {
 10     padding: 0;
 11     margin: 0;
 12 }
 13 #div1
 14 {
 15     position: relative;
 16     margin: 10px auto;
 17     border: 1px solid black;
 18     width: 680px;
 19     height:170px;
 20     overflow: hidden;
 21 }
 22 #div1 ul
 23 {
 24     position: absolute;
 25     left:0;
 26 }
 27 #div1 ul li
 28 {
 29     float:left;
 30     padding: 10px;
 31     list-style: none;
 32     width: 150px;
 33     height: 150px;
 34 }
 35 #div1 ul li img
 36 {
 37     width: 150px;
 38     height: 150px;
 39 }
 40 </style>
 41 <script>
 42 window.onload = function()
 43 {
 44     var oDiv = document.getElementById("div1");
 45     var oUl = document.getElementsByTagName("ul")[0];
 46     var oLi = document.getElementsByTagName("li");
 47     var oA = document.getElementsByTagName("a");
 48     var timer = null;
 49     var iSpeed = 8;
 50     //復制一遍ul
 51     oUl.innerHTML +=oUl.innerHTML;
 52     //ul的寬度是所有li寬度之和,復制ul之后的整個ul的寬度就是li的長度乘以一個li的寬度
 53     oUl.style.width = oLi.length*oLi[0].offsetWidth + "px";
 54     function fnMove()
 55     {
 56         //圖片向左移動時的條件,即在div里的ul的offsetLeft小於一個ul的寬度
 57         if (oUl.offsetLeft<-oUl.offsetWidth/2)
 58         {
 59             //將整個復制的ul向右拖拽直至整個ul中的第一張圖歸位到起點
 60             oUl.style.left = 0;
 61         }
 62         //圖片向右移動時的條件,即在div里的ul的offsetLeft大於等於0
 63         else if (oUl.offsetLeft>=0)
 64         {
 65             //將整個復制的ul向左拖拽直至整個ul中的第一張圖歸位到起點
 66             oUl.style.left = -oUl.offsetWidth/2 + "px";
 67         }
 68         //給ul一個速度讓整個ul的offsetLeft增加或減少,速度為正則向右移動,速度為負則向左移動
 69         oUl.style.left = oUl.offsetLeft +iSpeed + "px";
 70     }
 71     timer=setInterval(fnMove,30)
 72     //點擊向左滾動即觸發第一個a元素標簽
 73     oA[0].onclick = function()
 74     {
 75         iSpeed = -8;
 76     }
 77     //點擊向右滾動即觸發第二個a元素標簽
 78     oA[1].onclick = function()
 79     {
 80         iSpeed = 8;
 81     }
 82     //當鼠標移動到div里面的時候圖片滾動暫停,此時清除定時器即可。
 83     oDiv.onmouseover = function()
 84     {
 85         clearInterval(timer);
 86     }
 87     //當鼠標移出div的時候圖片繼續滾動,此時重新加載定時器。
 88     oDiv.onmouseout = function()
 89     {
 90         timer=setInterval(fnMove,30);
 91     }
 92 }
 93 </script>
 94 </head>
 95 <body>
 96 <div id="div1">
 97     <ul>
 98         <li><img src="img/1.png"></li>
 99         <li><img src="img/2.png"></li>
100         <li><img src="img/3.png"></li>
101         <li><img src="img/4.png"></li>
102     </ul>
103 </div>
104 <a href="javascript:;">向左滾動</a>
105 <a href="javascript:;">向右滾動</a>
106 </body>
107 </html>

 


免責聲明!

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



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