1. 程式人生 > 程式設計 >JavaScript實現簡單的輪播圖效果

JavaScript實現簡單的輪播圖效果

輪播圖是什麼?

輪播圖:在一個模組或者說視窗,通過電腦上滑鼠點選、手機上手指滑動後,可以看到多張圖片。這些圖片就都是輪播圖,這個模組就叫做輪播模組。

如何實現輪播圖

如何才能在js裡面做成一個輪播圖呢,比如下面這種的,可以自動生成圖片對應的小圓點、點選左右箭頭可以跳到上或下一張圖片、每隔幾秒自動輪播,還可以點選小小圓點去到指定的圖片。

JavaScript實現簡單的輪播圖效果

HTML結構

首先我們建立一個HTML頁面,這個結構很簡單,用一個大的div巢狀兩個div,取個名字叫slider,上面的div用來裝圖片,取個名字叫slider-img,下面的div就是控制元件,用來裝上下張圖片的按鈕和小圓點,這個就叫做slider-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="
javascript
實現簡單的輪播圖效果"/></a></li> <li><a href="#"><img src="images/2.jpg" alt="javaScript實現簡單的輪播圖效果"/></a></li> <li><a href="#"><img src="images/3.jpg" alt="JavaScript實現簡單的輪播圖效果"/></a></li> <li><a href="#"><img src="images/4.jpg" alt="JavaScript實現簡單的輪播圖效果"/http://www.cppcns.com
></a></li> <li><a href="#"><img src="images/5.jpg" alt="JavaScript實現簡單的輪播圖效果"/></a></li> <li><a href="#"><img src="images/6.jpg" alt="JavaScript實現簡單的輪播圖效果"/></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],0)                
            }
            if(num<index){
                // 我認為前面的圖在左邊
                iyXXGTyqEmgLiS[num].style.left = -width+"px";
                // 當前圖去右邊
                move(imgLiS[index],width)
                // 我要看的圖去中間
                move(imgLiS[num],0)                
            }

            // 更新index
            indewww.cppcns.comx = 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],width)
        // 要看的圖片運動到中間
        move(imgLiS[num],0)
        // 運動完成以後容器裡面顯示的是num這個圖
www.cppcns.com        // 所以記錄當前索引的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],-width)
        // 我要看的下一張去中間
        move(imgLiS[num],0)
        // 更新index的值
        index = num;
        light()
    }

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。