【发布时间】:2022-01-13 00:59:23
【问题描述】:
我正在用两个按钮做一个非常简单的计时器:stop 和 set。
代码如下:
<h1>0</h1>
<button onclick = 'set()'>Set</button>
<button onclick = 'stop()'>Stop</button>
var click = false;
let interval
function set(){
interval = setInterval(function(){
document.querySelector('h1').textContent = parseFloat(document.querySelector('h1').textContent)+1
},1000)
}
function stop(){
window.clearInterval(interval)
}
我发现,如果我一直按set 按钮会设置新的间隔,h1 加 1 的速度会越来越快(比 1000 毫秒快得多)。
我知道我可以将两个按钮合并为一个按钮,或者将设置按钮变为display: none 或使用其他方式来防止这种情况。
但我只是想知道为什么会发生这种情况。
有人能解释一下为什么会发生这种情况吗?
感谢您的回复?
【问题讨论】:
-
这真的很简单......你正在创建多个setInterval。这不是一次越来越快,而是在不同时间多次射击
-
除非您明确单击停止按钮,否则您不会清理之前的间隔。您可以改为调用
stop()作为set()逻辑的第一个操作。