JavaScriptは簡単な輪播図効果を実現します。

8066 ワード

輪播図は何ですか?
輪播図:モジュールやウィンドウで、パソコンでマウスをクリックしたり、携帯電話で指を動かしたりしたら、複数の写真が見られます。これらの写真は全部ロードショーです。このモジュールはロードショーモジュールといいます。
どうやって輪播図を実現しますか?
どのようにしてjsの中で輪播図を作ることができますか?例えば、下のようなものは自動的に画像に対応する小さな円点を生成します。左右の矢印をクリックして上または次の写真にジャンプできます。何秒ごとに自動的に輪播します。小さな円点をクリックして指定の画像に行くこともできます。

HTML構造
まずHTMLページを作成します。この構造は簡単です。大きいdivで二つのdivを嵌めて、sladerという名前をつけて、上のdivを使って写真を入れます。上のdivを使って、slade-mingといいます。下のdivはコントロールで、下の写真のボタンと小さい円点を付けるのです。これはslade-ctrlといいます。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" href="css/index.css"/>
    <script src="../public.js"></script>
    <script src="./js/index.js"></script>
</head>
<body>
    <div class="slider" id="slider">
        <div class="slider-img">
            <ul>
                <li><a href="#"><img src="images/1.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/2.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/3.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/4.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/5.jpg" alt=""/></a></li>
                <li><a href="#"><img src="images/6.jpg" alt=""/></a></li>
            </ul>
        </div>
        <div class="slider-ctrl">
        //          
            <span class="prev" id="prev"></span>
            <span class="next" id="next"></span>
        </div>
    </div>
</body>
</html>
CSSコード
cssコードはとても簡単です。

* {
    margin: 0;
    padding: 0;
}
.slider {
    width: 310px;
    height: 265px;
    margin: 100px auto;
    position: relative;
    overflow: hidden;
}
.slider-img {
    width: 310px;
    height: 220px;
}
ul {
    list-style: none;
}
li {
    position: absolute;
    top: 0;
    left: 0;
}
.slider-ctrl {
    text-align: center;
    padding-top: 10px;
}
.slider-ctrl-con {
    display: inline-block;
    width: 24px;
    height: 24px;
    background: url(../images/icon.png) no-repeat -24px -780px;
    text-indent: -99999px;
    margin: 0 5px;
    cursor: pointer;
}
.slider-ctrl-con.current {
    background-position: -24px -760px;
}
.prev,.next {
    position: absolute;
    top: 40%;
    width: 30px;
    height: 35px;
    background: url(../images/icon.png) no-repeat;
}
.prev {
    left: 10px;
}
.next {
    right: 10px;
    background-position: 0 -44px;
}
jsコード
まず第一に、波の需要分析を行う必要があります。思考を整理し、次のステップでコードを書くことができます。まず関連する要素を取ってから、写真の数に応じて、対応する小さな円を生成します。写真は重ねているので、他の図を右に隠して、最初の写真を表示すればいいです。その後、最初の小さな円点を点灯する必要があります。小さな円点と写真は一緒に結合されていることを保証します。その後、私たちは右矢印をクリックして次の図を見て、左矢印をクリックして前の図を見て、小さな円をクリックして対応する画像を表示することができます。最後に彼に自動的にルーレットの画像を放送させて、マウスが移動する時はルーレットを停止して、マウスが移動する時はルーレットを続けます。

window.onload = function(){
    // 0       
    //    
    var slider = document.getElementById('slider');
    //     li   
    var imgLiS = slider.children[0].children[0].children;
    //        
    var ctrlDiv = slider.children[1];
    //    (     )
    var prev = document.getElementById('prev')
    //    (     )
    var next = document.getElementById('next')
    //      
    var width = slider.offsetWidth;
    //                  
    var index = 0;

    // 1               
    for(var i=imgLiS.length-1;i>=0;i--){
        var newPoint = document.createElement('span');
        //                 ,              
        newPoint.className = "slider-ctrl-con";
        newPoint.innerHTML = i;
        //      
        ctrlDiv.insertBefore(newPoint,ctrlDiv.children[0])

        // 2           
        imgLiS[i].style.left = width+"px"
    }

    // 2          
    imgLiS[index].style.left = 0;

    //         
    var ctrlS = ctrlDiv.children;
    // 3         
    light()

    // 4             ,        
    prev.onclick = prevImg;

    // 5             ,        
    next.onclick = nextImg;

    // 6      ,       ,        
    for(var i=0;i<imgLiS.length;i++){
        ctrlS[i].onclick = function(){
            var num = +this.innerHTML;
            if(num>index){
                //           
                imgLiS[num].style.left = width+"px";
                //       
                move(imgLiS[index],'left',-width)
                //         
                move(imgLiS[num],'left',0)                
            }
            if(num<index){
                //           
                imgLiS[num].style.left = -width+"px";
                //       
                move(imgLiS[index],'left',width)
                //         
                move(imgLiS[num],'left',0)                
            }

            //   index
            index = num;
            //      
            light()
        }
    }

    // 7        :   3     
    var timer = setInterval(nextImg,3000)
    // 8         
    slider.onmouseenter = function(){
        clearInterval(timer)
    }
    // 9          
    slider.onmouseleave = function(){
        clearInterval(timer)
        timer = setInterval(nextImg,3000)
    }
    
    
    
    //            ,     
    function light(){
        for(var i=0;i<imgLiS.length;i++){
            ctrlS[i].className = "slider-ctrl-con"
        }
        ctrlS[index].className = "slider-ctrl-con current"
    }

    //         
    function prevImg(){
        var num = index-1;
        if(num<0){
            //      0,        0 ,      ,    length-1 
            num = imgLiS.length-1;
        }
        //             
        imgLiS[num].style.left = -width+"px";
        //          
        move(imgLiS[index],'left',width)
        //           
        move(imgLiS[num],'left',0)
        //               num   
        //          index      num
        index = num;
        light()

    }

    //         
    function nextImg(){
        var num = index + 1;
        if(num>imgLiS.length-1){
            num = 0;
        }
        //            
        imgLiS[num].style.left = width+"px";
        //        
        move(imgLiS[index],'left',-width)
        //           
        move(imgLiS[num],'left',0)
        //   index  
        index = num;
        light()
    }

}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。