轮播图跳到第一个后,点击最后一个小圆点之后就没有过渡动画了

来源:6-1 上升到面向对象-红绿灯小案例

慕仰2248851

2021-02-08 12:24:32

轮播图跳到第一个后,点击最后一个小圆点之后就没有过渡动画了

相关代码:

<!-- banner轮播图区 -->

        <div class="banner center" id="banner">

            <ul class="carousel" id="carousel">

                <li><img src="images/banner01.png" alt=""></li>

                <li><img src="images/banner02.png" alt=""></li>

                <li><img src="images/banner03.png" alt=""></li>


            </ul>

            <ol class="banner-dian" id="bannerDian">

                <li data-n="0" class="bgc01"></li>

                <li data-n="1"></li>

                <li data-n="2"></li>

            </ol>


        </div>


.site-head .banner {

    width100%;

    min-width1920px;

    height100%;

    min-height650px;

    overflowhidden;

    positionrelative;

}


.site-head .banner .carousel {

    width400%;

    height100%;

    min-height650px;

    positionabsolute;

    transition: transform 0.5s ease 0s;

    /* 此时要用transform:translateX()

    而不能用left */

    /* transform: translateX(-50%); */

    overflowhidden;

}


.site-head .banner .carousel li img {

    width100%;

    height100%;

    min-height650px;

}


.site-head .banner .carousel li {

    width25%;

    floatleft;

}


.site-head .banner .carousel li img {

    width100%;

    vertical-alignmiddle;

}


.site-head .banner .banner-dian {

    width42px;

    height10px;

    positionabsolute;

    margin-left50%;

    left-21px;

    bottom50px;

    overflowhidden;

}


.site-head .banner .banner-dian li {

    width10px;

    height10px;

    margin-right6px;

    border-radius50%;

    floatleft;

    background-color#FFFFFF;

    transition: background-color 0.3s ease 0s;

    /* 鼠标指针变为小手状 */

    cursorpointer;

}


.site-head .banner .banner-dian li:last-child {

    width10px;

    height10px;

    margin-right0px;

}






(function() {

    //得到元素

    var banner = document.getElementById("banner");

    var carousel = document.getElementById("carousel");

    //得到小圆点数组

    var dian = document.getElementById("bannerDian");

    var dian_list = dian.getElementsByTagName("li");

    //克隆的一个li

    var clone_li = carousel.firstElementChild.cloneNode(true);

    //上树

    carousel.appendChild(clone_li);

    var idx = 0;

    var timer;

    var lock = true;


    //实现轮播图自动滚动

    function car() {

        carousel.style.transition = "transform 0.5s ease 0s";

        idx++;


        carousel.style.transform = "translateX(" + (-25 * idx) + "%)";


        if (idx > 2) {

            setTimeout(function() {

                carousel.style.transition = "none"

                carousel.style.transform = "none";

                idx = 0;

            }, 500);

        }

        setDian();


    };


    //实现点击小圆点滚动轮播图

    dian.onclick = function(e) {

        if (!lock) {

            return;

        }

        lock = false;


        if (e.target.tagName.toLowerCase() == "li") {


            // alert(e.target.getAttribute("data-n"));

            idx = Number(e.target.getAttribute("data-n"));

            carousel.style.transform = "translateX(" + (-25 * idx) + "%)";

            setDian();

        }

        setTimeout(function() {

            lock = true;

        }, 500);


    }

    timer = setInterval(car, 2500);

    //进入轮播停止

    banner.onmouseenter = function() {

        clearInterval(timer);

    };


    //离开轮播开始

    banner.onmouseleave = function() {

        clearInterval(timer);

        timer = setInterval(car, 2500);

    };


    function setDian() {

        for (var i = 0; i < dian_list.length; i++) {


            if (i == idx % 3) {

                dian_list[i].className = "bgc01";

            } else {

                dian_list[i].className = "";

            }


        }

    };




})();


写回答

1回答

好帮手慕张

2021-02-08

同学你好,代码中在idx大于2的时候去掉了过渡属性,轮播图跳到第一个后,点击最后一个小圆点之后就没有过渡动画了,

http://img.mukewang.com/climg/60211b1409bb66bd05030308.jpg

可以给点击小圆点的时候加上过渡属性,就没有这个问题了,如下:

http://img.mukewang.com/climg/60211b290962529205920453.jpg

祝学习愉快!

0

0 学习 · 15276 问题

查看课程