欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實現(xiàn)簡單圖片輪播效果

 更新時間:2021年05月19日 15:32:08   作者:一紙嵐風(fēng)  
這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)簡單圖片輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了JS實現(xiàn)簡單圖片輪播效果的具體代碼,供大家參考,具體內(nèi)容如下

實現(xiàn)效果

  • 左右按鈕可點擊左右移動顯示圖片進(jìn)行無縫滾動
  • 下面的小圓圈點擊可跳到對應(yīng)的圖片索引
  • 不進(jìn)行上述操作時,圖片自動輪播

html源碼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Carousel chart</title>
    <link rel="stylesheet" href="./style.css" >
    <script src="./index.js"></script>
    <script src="./animate.js"></script>
</head>

<body>
    <div class="carousel_box" id="carousel-box">
        <a href="javascript:;" class="arrow-l">
            < </a>
                <a href="javascript:;" class="arrow-r"> > </a>
                <ul class="move">
                    <li><img src="./images/xuezhong_1.jpg" alt=""></li>
                    <li><img src="./images/guimizhizhu_2.jpg" alt=""></li>
                    <li><img src="./images/jianlai_3.jpg" alt=""></li>
                    <li><img src="./images/yichang_4.jpg" alt=""></li>
                </ul>
                <ol class="circle">
                </ol>
    </div>
</body>

</html>

一個大的div盒子里面,兩個左右懸浮于中間的按鈕,四張圖片,一行相對于下面的小圓圈

CSS源碼

*{
    padding: 0;
    margin: 0;
}

li {
    list-style-type: none;
}

#carousel-box {
    position: relative;
    width: 700px;
    height: 300px;
    background-color: pink;
    margin: 100px auto;
    overflow: hidden;
}

.arrow-l,.arrow-r {
    display: none;
    position:absolute;
    width: 24px;
    height: 40px;
    top: 50%;
    margin-top: -20px;
    background: rgba(0, 0, 0, 0.3);
    text-align:center;
    line-height: 40px;
    color: #fff;
    font-size: 18px;
    font-family: 'icomoon';
    z-index: 3;
}
.arrow-r {
    right: 0;
}

#carousel-box img{
    width: 700px;
    height: 300px;
}

#carousel-box ul {
    position:absolute;
    width: 1000%;
}

#carousel-box ul li {
    float: left;
}

.circle {
    position: absolute;
    bottom: 10px;
    right: 10px;
}

.circle li {
    float: left;
    width: 8px;
    height: 8px;
    margin: 0 5px;
    border: 2px solid rgba(255, 255, 255, 0.5);
    border-radius: 50%;
    cursor: pointer;
    z-index: 9999;
}

.current {
    background-color: pink;
}

JS源碼

animate.js:在水平平面實現(xiàn)左右移動的函數(shù)

function animate(obj, target, callback) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        /* 判斷正負(fù),小數(shù)取大還是取小 */
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);

        if (obj.offsetLeft == target) {
            clearInterval(obj.timer);
            callback && callback();
        }
        obj.style.left = obj.offsetLeft + step + 'px';
    }, 15);
}

index.js

window.addEventListener('load', function () {
    var carousel = document.querySelector('.carousel_box');
    var ul = document.querySelector('.move');
    var ol = document.querySelector('.circle');
    var carcouselWidth = carousel.offsetWidth;
    var arrow_l = document.querySelector('.arrow-l');
    var arrow_r = document.querySelector('.arrow-r');

    carousel.addEventListener('mouseenter', function () {
        arrow_r.style.display = 'block';
        arrow_l.style.display = 'block';
        clearInterval(timer);
        timer = null; // 清除定時器變量
    })

    carousel.addEventListener('mouseleave', function () {
        arrow_r.style.display = 'none';
        arrow_l.style.display = 'none';
        timer = setInterval(function () {
            arrow_r.click();
        }, 2000);
    })
    var num = 0;
    var circle = 0;

    // 根據(jù)圖片數(shù)量生成相對應(yīng)的小圓圈
    for (var i = 0; i < ul.children.length; i++) {
        var li = document.createElement('li');
        li.setAttribute('index', i);
        ol.appendChild(li);


        li.addEventListener('click', function () {
            for (var i = 0; i < ol.children.length; i++) {
                ol.children[i].className = '';
            }
            this.className = 'current';
            var n = this.getAttribute('index');
            num = n;
            circle = n;
            animate(ul, -n * carcouselWidth);
            console.log(n);
        })
    }

    ol.children[0].className = 'current';
    var first = ul.children[0].cloneNode(true);
    ul.appendChild(first);

    var flag = true;


    /* function circleChange() {
        for (var i = 0; i < ol.children.length; i++) {
            ol.children[i].className = '';
        }
        ol.children[circle].className = 'current';
    } */


    arrow_r.addEventListener('click', function () {

        if (flag) {
            flag = false;
            if (num == ul.children.length - 1) {
                ul.style.left = 0;
                num = 0;
            }
            num++;
            animate(ul, -num * carcouselWidth, function () {
                flag = true;
            });
        }

        circle++;
        if (circle == ol.children.length) {
            circle = 0;
        }

        circleChange();
    })

    arrow_l.addEventListener('click', function () {
        if (flag) {
            flag = false;
            if (num == 0) {
                num = ul.children.length - 1;
                ul.style.left = -num * carcouselWidth + 'px';

            }
            num--;
            animate(ul, -num * carcouselWidth, function () {
                flag = true;
            });

            circle--;
            circle = circle < 0 ? ol.children.length - 1 : circle;
            // 調(diào)用函數(shù)
            circleChange();
        }
    });


    function circleChange() {

        for (var i = 0; i < ol.children.length; i++) {
            ol.children[i].className = '';
        }

        ol.children[circle].className = 'current';
    }

    var timer = setInterval(function () {

        arrow_r.click();
    }, 2000);

心得:在js實現(xiàn)功能中,如何根據(jù)圖片數(shù)量生成小圓圈并能無縫滾動需要重點注意。
未解決的bug:多次快速點擊小圓圈跳轉(zhuǎn)后,可能會導(dǎo)致小圈圈與圖片索引位置錯亂,同樣點擊左右按鈕也有可能出現(xiàn)類似問題。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript/TypeScript中==和===的區(qū)別詳解

    JavaScript/TypeScript中==和===的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript/TypeScript中==和===區(qū)別的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-03-03
  • JavaScript Reduce使用詳解

    JavaScript Reduce使用詳解

    這篇文章主要介紹了JavaScript Reduce使用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下
    2021-03-03
  • JavaScript中 ?、!和?? 的用法及區(qū)別詳解

    JavaScript中 ?、!和?? 的用法及區(qū)別詳解

    在JavaScript中,?., !., 和 ?? 是三個不同的操作符,各自有不同的用途,旨在提高代碼的簡潔性和安全性,尤其是在處理可能的null或undefined值時,下面分別解釋這三個操作符的用法,需要的朋友可以參考下
    2024-10-10
  • JS動態(tài)加載當(dāng)前時間的方法

    JS動態(tài)加載當(dāng)前時間的方法

    這篇文章主要介紹了JS動態(tài)加載當(dāng)前時間的方法,涉及html的onload方法及javascript操作時間的技巧,需要的朋友可以參考下
    2015-02-02
  • js中的閉包實例展示

    js中的閉包實例展示

    閉包是js中的一大特色,也是一大難點。下面這篇文章主要給大家介紹了關(guān)于js中閉包的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-11-11
  • 詳解JavaScript數(shù)組的操作大全

    詳解JavaScript數(shù)組的操作大全

    這篇文章主要給大家介紹js數(shù)組的操作,數(shù)組的創(chuàng)建,數(shù)組元素的發(fā)那個吻,數(shù)組元素的添加,數(shù)組元素的刪除,數(shù)組的截取和合并,數(shù)組的拷貝,數(shù)組元素的排序,數(shù)組元素的字符串化等知識,對js數(shù)組的操作感興趣的朋友可以參考下本篇文章
    2015-10-10
  • js實現(xiàn)一款簡單踩白塊小游戲(曾經(jīng)很火)

    js實現(xiàn)一款簡單踩白塊小游戲(曾經(jīng)很火)

    本文給大家分享原生js實現(xiàn)曾經(jīng)很火的一款小游戲—別踩白塊,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-12
  • javascript中的類,繼承,構(gòu)造函數(shù)詳解

    javascript中的類,繼承,構(gòu)造函數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了javascript中的類,繼承,構(gòu)造函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • JavaScript類的寫法

    JavaScript類的寫法

    這篇文章主要為大家詳細(xì)介紹了JavaScript類的寫法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • BootStrap Table實現(xiàn)server分頁序號連續(xù)顯示功能(當(dāng)前頁從上一頁的結(jié)束序號開始)

    BootStrap Table實現(xiàn)server分頁序號連續(xù)顯示功能(當(dāng)前頁從上一頁的結(jié)束序號開始)

    這篇文章主要介紹了BootStrap Table實現(xiàn)server分頁序號連續(xù)顯示功能(當(dāng)前頁從上一頁的結(jié)束序號開始),需要的朋友可以參考下
    2017-09-09

最新評論