Javascript 鼠标悬停 运行 功能,然后等待并再次 运行
Javascript mouseover run function, then wait and run again
我正在尝试让一个函数在鼠标悬停在某个元素上时触发。但是,如果该函数已经 运行 我希望它不会触发。
我有这个用于鼠标悬停触发器
onmouseover="runFunc()">
我有这个 js:
var timerStarted = false;
function waitToStart() {
timerStarted = false;
}
function runFunc() {
if (!timerStarted) {
console.log('run function');
}
timerStarted = true;
setTimeout(waitToStart, 6000);
}
当我第一次将鼠标悬停在该元素上时,我得到
run function
在 6 秒内没有任何反应,这似乎是正常的。然而,6 秒后,控制台输出快速计数,达到我将鼠标悬停在该函数上的次数:
(24) run function
我很难理解为什么以及如何确保该函数仅在鼠标悬停后每 6 秒触发一次。
您正在启动 许多 个计时器。最终它们都结束了,每个都将你的布尔值设置为假,即使在那之前的半秒你仍然开始 又一个 计时器。
您真正想要的是在发出新计时器之前取消任何先前启动的计时器,或者仅在您确定前一个计时器已经超时时才启动新计时器.效果有点不同:第一个解决方案将使用 every 鼠标移动重置倒计时(因此必须保持至少 6 秒),而第二个将确保有if
块的执行间隔至少 6 秒。
第二种方法的工作原理如下:
var timerStarted = false;
function waitToStart() {
timerStarted = false;
}
function runFunc() {
if (!timerStarted) {
console.log('run function');
timerStarted = true; // <--- moved inside the IF block
setTimeout(waitToStart, 6000); //
}
}
我正在尝试让一个函数在鼠标悬停在某个元素上时触发。但是,如果该函数已经 运行 我希望它不会触发。
我有这个用于鼠标悬停触发器
onmouseover="runFunc()">
我有这个 js:
var timerStarted = false;
function waitToStart() {
timerStarted = false;
}
function runFunc() {
if (!timerStarted) {
console.log('run function');
}
timerStarted = true;
setTimeout(waitToStart, 6000);
}
当我第一次将鼠标悬停在该元素上时,我得到
run function
在 6 秒内没有任何反应,这似乎是正常的。然而,6 秒后,控制台输出快速计数,达到我将鼠标悬停在该函数上的次数:
(24) run function
我很难理解为什么以及如何确保该函数仅在鼠标悬停后每 6 秒触发一次。
您正在启动 许多 个计时器。最终它们都结束了,每个都将你的布尔值设置为假,即使在那之前的半秒你仍然开始 又一个 计时器。
您真正想要的是在发出新计时器之前取消任何先前启动的计时器,或者仅在您确定前一个计时器已经超时时才启动新计时器.效果有点不同:第一个解决方案将使用 every 鼠标移动重置倒计时(因此必须保持至少 6 秒),而第二个将确保有if
块的执行间隔至少 6 秒。
第二种方法的工作原理如下:
var timerStarted = false;
function waitToStart() {
timerStarted = false;
}
function runFunc() {
if (!timerStarted) {
console.log('run function');
timerStarted = true; // <--- moved inside the IF block
setTimeout(waitToStart, 6000); //
}
}