这样写节流锁为什么不生效呢
来源: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 += ` ${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回答
同学你好,是想实现“点击一次开始按钮,就会开启定时器;此时再次多次点击开始按钮,并不会重复开启定时器;当点击停止按钮后,再次点击开始按钮,才会重新开启一个定时器”吗?如果是的话,同学的代码有逻辑上的错误,以开始按钮为例,初始时,lock是true,点击开始按钮,会执行如下代码(图一):
但是,1s后,lock会变成true:
此时,点击开始按钮,if中的条件是false,依旧能执行图一红框中的代码,所以起不到锁的作用。
建议修改如下:
祝学习愉快!
相似问题