1. 程式人生 > >JS製作簡單圖片輪播--通過調整margin製作

JS製作簡單圖片輪播--通過調整margin製作

圖片輪播在網頁中使用的非常廣泛,製作的方法有很多,介紹一下我用調整margin來實現3張圖片輪播功能。

設計思路:

  1. 自動跳轉。三張圖片每隔3秒跳轉一張,第三張圖片跳轉完成後,3秒後跳轉至第一張圖片。
  2. 滑鼠控制。通過滑鼠點選跳轉按鈕完成跳轉。向左向右跳轉,同上第3張後是第一張,相反方向時,第一張後是第三張。
  3. 注意實項。滑鼠點選跳轉時,自動跳轉停止。

結構

效果圖如下:

效果圖

由於錄屏軟體原因導致效果不是很好。見諒

開發思路:
首先設定一個容器ul的width為300%,ul子元素li的width為30%(ul的30%即為螢幕的100%),
跳轉一次,ul的margin-left屬性增加 -100%,即第一張圖片ul{margin-left:0;}、第二張圖片ul{margin-left:-100%;}、第三張圖片ul{margin-left:-200%;}


使用setInterval 控制延時迴圈,通過JS進行計算,保證圖片輪播效果。

<style>
//css樣式
li{list-style:none;}
#head{width:100%;height:600px;overflow: hidden;}
#head ul{width:300%;height:600px;margin-top:0;padding:0;}
#head ul li{width:30%;height:590px;padding: 0;float:left;display: block;margin:0 1.66%;}
#head #listico{width: 100px;height:30
px
;position:absolute;margin:-10% 0 0 45%;z-index:2;}
#head #listico ul{display: block;width: 120px;height:30px;} #head #listico ul li{width:30px;height:30px;float:left;display: block;font-size: 20px;color:white;margin-left: 5%;text-align: center;border-radius: 25%;padding-top: 4px;} #head #turnleft{width:40px
;height:100px;float: left;margin-top:-400px;margin-left:50px;position:relative;z-index: 1;border:none;}
#head #turnright{width:40px;height:100px;float: right;margin-top:-400px;margin-right:50px;position:relative;z-index: 1;border:none;} #head #road #road-li-f{background-color: red;} #head #road #road-li-s{background-color: yellow;} #head #road #road-li-t{background-color: green;} .class-blue{background: blue;}
</style> <body> <div id="head"> //road是承載3張圖片的容器,每個li記憶體放一張圖片,這裡使用背景顏色代替圖片,ul的寬度是li的三倍,讓三張li平鋪。 <ul id="road"> <li id="road-li-f"></li> <li id="road-li-s"></li> <li id="road-li-t"></li> </ul> <button id="turnleft"><</button>//向左 <button id="turnright">></button>//向右 <div id="listico"> <ul>//頁數 <li id="ol-f" class="class-blue">1</li> <li id="ol-s">2</li> <li id="ol-t">3</li> </ul> </div> </div> </body>

js程式碼如下:

window.onload=function (){
    var tl =document.getElementById("turnright");
    var tr =document.getElementById("turnleft");
    var road =document.getElementById("road");
    var olaf=document.getElementById("ol-f");
    var olas=document.getElementById("ol-s");
    var olat=document.getElementById("ol-t");
    var timeId=null;
    var i=0;
    function listTime(){//頁數的顏色變化
            switch(i){
                case 0:
                olaf.style.background="blue"
                olas.style.background="none"
                olat.style.background="none"
                break;
                case 1:
                olaf.style.background="none"
                olas.style.background="blue"
                olat.style.background="none"
                break;
                case 2:
                olaf.style.background="none"
                olas.style.background="none"
                olat.style.background="blue"
                break;

            }
    }   
    function tpturnLeft(){//向左
        i+=2;
        i=i%3;
        listTime();
        if(i>0&&i<3){
            var si =(100 * i);
            road.style.marginLeft="-"+si+"%";
        }else{
            road.style.marginLeft="0";
            i=0;
        }
    }
    function tpturnRight(){//向右
        i+=1;
        i=i%3;
        listTime();
        if(i>0&&i<3){
            var si =100 * i;
            road.style.marginLeft="-"+si+"%";
        }else{
            road.style.marginLeft=0;
            i=0;
        }
    }
    timeId=setInterval(tpturnRight,3000);//自動輪播,3秒一次
    tl.onclick=function(){//滑鼠控制輪播
        if(timeId){//滑鼠點選時,清除自動輪播
            clearInterval(timeId);
            timeId=null;
        }
        tpturnRight();
        timeId=setInterval(tpturnRight,3000);//滑鼠操作後三秒無操作時,轉為自動輪播
    }
    tr.onclick=function(){//滑鼠控制輪播
        if(timeId){//滑鼠點選時,清除自動輪播
            clearInterval(timeId);  
            timeId=null;
        }
        tpturnLeft();
        timeId=setInterval(tpturnRight,3000);//滑鼠操作後三秒無操作時,轉為自動輪播
    }

}

補充:JS裡面,控制延時的除了setInterval外還有一個,setTimeout.他們的區別最簡單的就是前者可以迴圈執行,後僅一次。

setInterval(function, time);//function為要執行的函式,time為延時時間,單位是毫秒。
clearInterval();對應的清除
setTimeout(function, time);//同setInterval
clearTimeout();//同clearInterval

以上是作者自己的思路,求交流,求指正。