javascript實現圖片循環滾動效果


 

 

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

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

                                                                                                圖①

 

                                                                                                  圖②

 

                                                                                                    圖③

                                                                                                       圖④ 

                                                                                                       圖⑤

                                                                                                                                                                                                           

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

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

上代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>無縫滾動,移入暫停</title>
<style>
body,div,ul,li,p
{
    padding: 0;
    margin: 0;
}
#div1
{
    position: relative;
    margin: 10px auto;
    border: 1px solid black;
    width: 680px;
    height:170px;
    overflow: hidden;
}
#div1 ul
{
    position: absolute;
    left:0;
}
#div1 ul li
{
    float:left;
    padding: 10px;
    list-style: none;
    width: 150px;
    height: 150px;
}
#div1 ul li img
{
    width: 150px;
    height: 150px;
}
</style>
<script>
window.onload = function()
{
    var oDiv = document.getElementById("div1");
    var oUl = document.getElementsByTagName("ul")[0];
    var oLi = document.getElementsByTagName("li");
    var oA = document.getElementsByTagName("a");
    var timer = null;
    var iSpeed = 8;
    //復制一遍ul
    oUl.innerHTML +=oUl.innerHTML;
    //ul的寬度是所有li寬度之和,復制ul之后的整個ul的寬度就是li的長度乘以一個li的寬度
    oUl.style.width = oLi.length*oLi[0].offsetWidth + "px";
    function fnMove()
    {
        //圖片向左移動時的條件,即在div里的ul的offsetLeft小於一個ul的寬度
        if (oUl.offsetLeft<-oUl.offsetWidth/2)
        {
            //將整個復制的ul向右拖拽直至整個ul中的第一張圖歸位到起點
            oUl.style.left = 0;
        }
        //圖片向右移動時的條件,即在div里的ul的offsetLeft大於等於0
        else if (oUl.offsetLeft>=0)
        {
            //將整個復制的ul向左拖拽直至整個ul中的第一張圖歸位到起點
            oUl.style.left = -oUl.offsetWidth/2 + "px";
        }
        //給ul一個速度讓整個ul的offsetLeft增加或減少,速度為正則向右移動,速度為負則向左移動
        oUl.style.left = oUl.offsetLeft +iSpeed + "px";
    }
    timer=setInterval(fnMove,30)
    //點擊向左滾動即觸發第一個a元素標簽
    oA[0].onclick = function()
    {
        iSpeed = -8;
    }
    //點擊向右滾動即觸發第二個a元素標簽
    oA[1].onclick = function()
    {
        iSpeed = 8;
    }
    //當鼠標移動到div里面的時候圖片滾動暫停,此時清除定時器即可。
    oDiv.onmouseover = function()
    {
        clearInterval(timer);
    }
    //當鼠標移出div的時候圖片繼續滾動,此時重新加載定時器。
    oDiv.onmouseout = function()
    {
        timer=setInterval(fnMove,30);
    }
}
</script>
</head>
<body>
<div id="div1">
    <ul>
        <li><img src="img/1.png"></li>
        <li><img src="img/2.png"></li>
        <li><img src="img/3.png"></li>
        <li><img src="img/4.png"></li>
    </ul>
</div>
<a href="javascript:;">向左滾動</a>
<a href="javascript:;">向右滾動</a>
</body>
</html>

  


免責聲明!

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



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