关于锁lock的问题

来源:3-13 编程练习

雨7758978

2021-11-11 18:42:18

相关代码:

<!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,
            lock:1,//打开状态
            start: function () {
                if(this.lock==1){
                    this.lock=0;
                    startBtn.addEventListener('click',()=>{
                        this.timer=setInterval(()=>{
                            box.innerHTML+=' '+'Hello World';
                        },1000);
               
                    },false)
                }
               
            },
           
            stop: function () {
                // 在此补充代码
                stopBtn.addEventListener('click',()=>{
                    clearInterval(this.timer);
                    this.lock=1;
                },false)
            },
        }
         // 在此补充代码
         show.start();
         show.stop();
    </script>
</body>
</html>

问题描述:

为什么在start函数中把if判断语句放在内部就好用

相关截图:

https://img.mukewang.com/climg/618cf30b09f7ebd209270576.jpg好用!

https://img.mukewang.com/climg/618cf332099b5ad109040561.jpg还是会出现连续点击有bug。

写回答

1回答

好帮手慕久久

2021-11-12

同学你好,解答如下:

如下这样写:

https://img.mukewang.com/climg/618dc44409cc722204550173.jpg

当 show.start()执行时,就会执行该if语句,而点击按钮时,并不会再次执行if语句:

https://img.mukewang.com/climg/618dc482094ce9b007460645.jpg

点击事件触发时,只会执行事件处理函数中的代码:

https://img.mukewang.com/climg/618dc49e098a155809060201.jpg

即lock相关代码不会再次执行,因此起不到锁的作用。

需要把if语句写在事件处理函数中:

https://img.mukewang.com/climg/618dc4f809d6705603650132.jpg

这样点击事件触发中,才会执行lock的相关的判断。

祝学习愉快!

0

0 学习 · 15276 问题

查看课程