我正在用Javascript在html中创建一个可视计数器。开始时计数器是"0"。鼠标进入时它开始计数直到10(每秒加+1),鼠标离开时它应该再次重置为0并停止计数,然而,当我移开光标时,它只是短暂地重置为0,然后继续计数直到10,从鼠标离开时停止的数字开始。
我的代码如下所示:
let timer = ''
box[4]?.addEventListener('mouseenter', () => {
let sec = 0
let timer = setInterval(() => {
box[4].innerHTML = String(1 + sec)
sec++
if(sec === 10){
clearInterval(timer);
}
}, 1000)
})
box[4]?.addEventListener('mouseleave', () => {
clearInterval(timer)
box[4].innerHTML = String(0)
})
我怎样才能改进它,使计数器在mouseleave上再次变为0并停止任何计数?
3条答案
按热度按时间57hvy0tb1#
您需要在
mouseenter
回调内删除let timer
上的let
:原因是当你执行
let timer
时,你实际上是在填充一个新的本地变量timer
,而代码顶部的另一个变量不会被填充,这意味着你在mouseleave
处理程序中的clearInterval
实际上没有取消任何东西。wgxvkvu92#
在这部分代码中,你一次又一次地设置计时器。如果你删除关键字
let
,它将完美地工作。c0vxltue3#
这并不是你所要求的,但至少在某些情况下,知道你可以在一个监听器中完成所有这些可能是有用的,我不知道这是否对你的具体情况最好;但经常将该模式用于拖动事件。它将两个事件保持在同一范围内,并且
mouseleave
事件仅在mouseenter
事件之后"活动",并在之后立即删除它。