为什么的我的节流锁没加上

来源:6-3 编写跑马灯轮播图特效

菜鸟瑞

2021-04-02 23:16:06

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        *{

            margin0;

            padding0;

        }

        .carousel {

            width650px;

            height360px;

            border1px solid #000;

            margin50px auto;

            positionrelative;

            overflowhidden;

        }

        .carousel ul {

            list-stylenone;

            width6000px;

            positionrelative;

            left0px;

            transitionleft .5s ease 0s;

        }

        .carousel ul li {

            floatleft;

        }

        .carousel .leftbtn {

            positionabsolute;

            left20px;

            top50%;

            margin-top-25px;

            width50px;

            height50px;

            background-colorrgb(28180226);

            border-radius50%;

        }

        .carousel .rightbtn {

            positionabsolute;

            right20px;

            top50%;

            margin-top-25px;

            width50px;

            height50px;

            background-colorrgb(28180226);

            border-radius50%;

        }

    </style>

</head>

<body>

    <div class="carousel">

        <ul id="list">

            <li><img src="images/beijing/0.jpg" alt=""></li>

            <li><img src="images/beijing/1.jpg" alt=""></li>

            <li><img src="images/beijing/2.jpg" alt=""></li>

            <li><img src="images/beijing/3.jpg" alt=""></li>

            <li><img src="images/beijing/4.jpg" alt=""></li>

        </ul>

        <a href="javascript:;" class="leftbtn" id="leftbtn"></a>

        <a href="javascript:;" class="rightbtn" id="rightbtn"></a>

    </div>

    <script>

        // 得到按钮和ul,ul整体进行运动

        var leftbtn = document.getElementById('leftbtn');

        var rightbtn = document.getElementById('rightbtn');

        var list = document.getElementById('list');


        // 克隆第一张图片

        var cloneli = list.firstElementChild.cloneNode(true);

        list.appendChild(cloneli);


        // 当前ul显示到第几张了,从0开始数

        var idx = 0;


        // 节流锁

        var lock = true;


        // 右边按钮监听

        rightbtn.onclick = function () {

            // 判断锁的状态

            if (!lockreturn


            lock = false;


            // 给list加过渡,为什么要加??css中不是已经加了么??这是因为最后一张图片会把过渡去掉

            list.style.transition = 'left .5s ease 0s';

            idx ++;

            if (idx > 4) {

                // 设置一个延时器,延时器的功能就是将ul瞬间拉回0的位置,延时器的目的就是让过渡动画结束之后

                setTimeout(function() {

                    // 取消掉过渡,因为要的是瞬间移动,不是“咕噜”回去

                    list.style.transition = 'none';

                    list.style.left = 0;

                    idx = 0;

                }, 500);

            }

            list.style.left = -idx * 650 + 'px';


            // 函数节流

            setTimeout(function() {

                lock = true

            }, 500);

        }


        // 左边按钮监听

        leftbtn.onclick = function () {

            if (!lockreturn;


            lock = false;


            // 判断是不是第0张,如果是,就要瞬间用假的替换真的

            if (idx == 0) {

                // 取消掉过渡,因为要的是瞬间移动,不是“咕噜”过去

                list.style.transition = 'none';

                // 直接瞬间移动到最后的假图片上

                list.style.left = -5 * 650 + 'px';

                // 设置一个延时器,这个延时器的延时时间可以是0毫秒,虽然是0毫秒,但是可以让我们过渡先是瞬间取消,然后再加上

                setTimeout(function() {

                    // 加过渡

                    list.style.transition = 'left .5s ease 0s';

                    // idx改为真正的最后一张

                    idx = 4;

                    list.style.left = -idx * 650 + 'px';

                }, 0);

            } else {

                idx --;

                list.style.left = -idx * 650 + 'px';

            }

            

            // 函数节流

            setTimeout(function() {

                lock = true

            }, 500);

        }

    </script>

</body>

</html>


写回答

1回答

好帮手慕然然

2021-04-03

同学你好,老师测试了一下你的代码,节流锁的效果是实现了的,当频繁点击左右按钮时,轮播图没有频繁切换图片,意味着没有频繁执行切换代码,而是等上一次切换执行完成之后再执行下一次切换代码。祝学习愉快!


0

0 学习 · 15276 问题

查看课程