天天看點

JavaScript簡單實作無縫輪播圖

JavaScript簡單實作無縫輪播圖

主要技術點在第四張切換到起一張的時候。

加入settimeout定時器,時間設定為0。設定為0,看似沒有必要,實質上settimeout會把裡面的代碼放到隊列當中,隻有其他的代碼執行完成之後才會執行裡面的代碼。就不會導緻渲染過快而出現過渡切換的效果。

lists = document.getElementsByClassName('list')[0];
divs = document.getElementsByClassName('div');

var movePx = 0;
var timer = 0;

window.onload = function(){//初始化樣式和開始移動
    lists.style.transitionDuration = '.5s';
    timer = setInterval(function(){
        movePx -= 500;
        move()
    },1000)
}

function move(){//移動
    if(movePx<-2000){//右溢出時的判斷
        lists.style.transitionDuration = '0s';
        movePx = 0;
        setTimeout(function(){
            movePx-=500
            lists.style.transform='translate3d('+(movePx)+'px,0,0)'
            lists.style.transitionDuration = '.5s';
            for(var i = 0 ;i<divs.length-2;i++){
                divs[i].className = 'div'
            }
            divs[movePx/-500].className = 'div bgc'
        },0)
    }
    if(movePx>0){//左溢出時的判斷
        lists.style.transitionDuration = '0s';
        movePx = -2000;
        setTimeout(function(){
            lists.style.transitionDuration = '.5s';
            movePx+=500
            lists.style.transform='translate3d('+(movePx)+'px,0,0)'
            for(var i = 0 ;i<divs.length-2;i++){
                divs[i].className = 'div'
            }
            divs[movePx/-500].className = 'div bgc'
        },0)
    }

    lists.style.transform='translate3d('+movePx+'px,0,0)';

    //按鈕的樣式
    for(var i = 0 ;i<divs.length-2;i++){
        divs[i].className = 'div'
    }
    if(movePx/-500>=4){
        divs[0].className = 'div bgc'
    }else if(movePx/-500 == 1){
        divs[1].className = 'div bgc'
    }else{
        divs[movePx/-500].className = 'div bgc'
    }
}
//滑鼠的移入和移出
for(var i=0;i<divs.length;i++){
    lists.onmouseover = function(){
        clearInterval(timer)
    }
    divs[i].onmouseover = function(){
        clearInterval(timer)
    }
    lists.onmouseleave = function(){
        window.onload()
    }
    divs[i].onmouseleave = function(){
        window.onload()
    }
}
//點選數字切換
for(let i=0; i<4;i++){
    divs[i].onclick = function(){
        movePx = i*(-500);
        console.log(movePx)
        move()
    }
}
//下一張
divs[5].onclick = function(){
    movePx-=500;
    move()
}
//上一張
divs[4].onclick = function(){
    movePx+=500;
    move()
}
           
.wrap{
    width:500px;
     height:320px;
    position:relative;
     margin:50px auto;
    overflow:hidden;
}
ul,li{
    margin:0;
    padding:0;
    list-style:none;
}
img{
    vertical-align: top;
     border:none;
    }
.list{
    width:500%;  
    height: 320px;
    /* animation: move 10s linear infinite; */
    transition-property : all;
}
.list li{
    float:left; 
    width:500px; 
    height:320px;
}
.list img{
    width:100%;
    height:100%;
}
.div {
    width: 30px;
    height: 30px;
    background-color: rgba(252, 116, 116,.5);
    margin: 0 10px;
    cursor: pointer;
    float: left;
    line-height: 30px;
    text-align: center;
    color: antiquewhite;
}
.bgc {
    background-color: rgba(26, 122, 206,0.5);
}
.bottom {
    position: absolute;
    bottom: 0;
}
.left {
    position: absolute;
    left: 0;
    top: 45%;
    width: 30px;
    height: 30px;
    background-color: rgba(204, 204, 204,.5);
}
.right {
    position: absolute;
    right: 0;
    top: 45%;
    width: 30px;
    height: 30px;
    background-color: rgba(204, 204, 204,.5);
}
           
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="./css/css.css">
    <title>輪播圖</title>
</head>
<body>
<div class="wrap">
    <ul class="list">
        <li><img src="img/1.jpg" alt=""/></li>
        <li><img src="img/2.jpg" alt=""/></li>
        <li><img src="img/3.jpg" alt=""/></li>
        <li><img src="img/4.jpg" alt=""/></li>
        <li><img src="img/1.jpg" alt=""/></li>
    </ul>
    <div class="bottom">
        <div class="div bgc">1</div>
        <div class="div">2</div>
        <div class="div">3</div>
        <div class="div">4</div>
    </div>
    <div class="div left"><</div>
    <div class="div right">></div>
</div>


<script src="./js/js.js"></script>
</body>
</html>

           

繼續閱讀