gpt4 book ai didi

javascript - setTimeout 按预期工作,但 seInterval 不在点击事件中

转载 作者:行者123 更新时间:2023-11-28 05:28:45 26 4
gpt4 key购买 nike

当我正在研究区分普通 JavaScript(无 JQuery)中同一元素的单击和双击问题时,我看到 this @Garland Pope 给出的解决方案并将其转换为纯 JavaScript:

var numClicks = 0,
interval = null,
delay = 250;
document.addEventListener("click", function(event) {
numClicks++;
if (numClicks === 1) {
interval = setTimeout(function() {
// Things to do on one click.
console.log("Single Click");
numClicks = 0;
}, delay);
} else {
clearTimeout(interval);
// Things to do on double click.
console.log("Double Click");
numClicks = 0;
}
});

但是当我将 setTimeoutclearTimeout 分别更改为 setIntervalclearInterval 时,我没有得到预期的结果结果。使用setTimeout,对于“延迟”时间内的两次点击,它记录“双击”,对于“延迟”时间内的单击,它仅记录“单击”一次

但是对于setInterval,双击也会发生同样的情况。但是,区别在于单击一下。当我在“延迟”时间内单击一次时,它会记录“单击”,但多次并且永远不会停止。这不是我想要的。

谁能解释一下为什么会发生这种情况?我不知道。

最佳答案

这里不需要 setInterval,它会破坏所有逻辑。
setTimeout - 调用函数一次的计时器。
setInterval - 每秒调用函数的计时器。

您单击,然后应用程序启动计时器并等待。如果不再点击,则会显示“单击”

这里的例子,它可以工作,但它模拟 setTimeout 函数

var numClicks = 0;
var interval = null;
var delay = 250;

document.addEventListener('click', function () {
++numClicks;

if (numClicks === 1) {
interval = setInterval(function () {
clearInterval(interval);

// Things to do on one click.
console.log('Single Click');
numClicks = 0;

}, delay);
} else {
clearInterval(interval);

// Things to do on double click.
console.log('Double Click');
numClicks = 0;
}
});

关于javascript - setTimeout 按预期工作,但 seInterval 不在点击事件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com