这样写节流锁为什么不生效呢

来源:3-13 编程练习

ygqygq2

2021-08-18 17:47:29

老师,这样写节流锁为什么不生效呢?

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Document</title>
    <style>
        div {
            width: 300px;
            margin: 20px 0;
            line-height: 30px;
            background: yellowgreen;
        }
    </style>
</head>

<body>
    <button id="start">开始</button>
    <button id="stop">停止</button>
    <div id="box"></div>
    <script>
        const startBtn = document.getElementById('start')
        const stopBtn = document.getElementById('stop')
        const box = document.getElementById('box')
        var show = {
            content: "Hello World",
            timer: null,
            start: function () {
                // 在此补充代码
                if (!lock) return;
                let tmp_content = this.content;
                this.timer = setInterval(() => {
                    box.innerHTML += `&nbsp;${tmp_content}`;
                }, 1000);
                lock = false;
                setTimeout(() => { lock = true }, 1000);
            },
            stop: function () {
                // 在此补充代码
                if (!lock) return;
                clearInterval(this.timer);
                lock = false;
                setTimeout(() => { lock = true }, 1000);
            },
        }
        // 在此补充代码
        var lock = true;
        startBtn.onclick = () => show.start();
        stopBtn.onclick = () => show.stop();
    </script>
</body>

</html>
写回答

1回答

好帮手慕久久

2021-08-18

同学你好,是想实现“点击一次开始按钮,就会开启定时器;此时再次多次点击开始按钮,并不会重复开启定时器;当点击停止按钮后,再次点击开始按钮,才会重新开启一个定时器”吗?如果是的话,同学的代码有逻辑上的错误,以开始按钮为例,初始时,lock是true,点击开始按钮,会执行如下代码(图一):

http://img.mukewang.com/climg/611cda1809a9917507000306.jpg

但是,1s后,lock会变成true:

http://img.mukewang.com/climg/611cda2c09b2693006720157.jpg

此时,点击开始按钮,if中的条件是false,依旧能执行图一红框中的代码,所以起不到锁的作用。

建议修改如下:

http://img.mukewang.com/climg/611cdc250912f6f708530755.jpg

祝学习愉快!

0
hgqygq2
hp>谢谢,又对节流锁有了更深一步的认识。

h021-08-18
共1条回复

0 学习 · 15276 问题

查看课程