gpt4 book ai didi

javascript - 与 getTime 一起使用的停止/中断函数执行

转载 作者:行者123 更新时间:2023-11-27 22:41:10 25 4
gpt4 key购买 nike

当我按下鼠标中键时,一秒后控制台中会显示“1秒后”。没关系,这就是我需要的。但如果我释放鼠标中键(鼠标悬停监听器),我也想停止 1 秒延迟。但是现在,当“wait”函数执行“mouseup”监听器时,当然不会将“delay”变量更改为 false(仅在经过 1 秒后)。但是mb有什么办法可以做到吗? (停止“等待”功能,例如,当鼠标按下中键时延迟 0.5 秒,而不是 1 秒)

function wait(ms){
var start = new Date().getTime();
var end = start;
while((end < start + ms) && delay == true) {
end = new Date().getTime();
}
}

var delay = false;

document.addEventListener("mousedown", function(e) {
if (e.button == 1) { // 1 - middle mouse button
delay = true;
wait(1000); // delay 1 sec
console.log("after 1 sec");
}
});

document.addEventListener("mouseup", function(e) {
if (e.button == 1) {
delay = false;
}
});

更新:我将用 document.execCommand("copy"); 替换 console.log("after 1 sec");,我们可以将复制到剪贴板的时间最大延迟在 Chrome 浏览器中使用 setTimeout() 函数可以达到 1 秒,但在 Firefox 中使用 setTimeout() 则不起作用,但是 wait(999); document.execCommand('copy'); 适用于 Firefox(最多允许 999 毫秒)

最佳答案

您的问题是 mousedown 监听器函数将阻止进一步执行,直到完成为止。您的等待函数实现了所谓的“忙等待”。您应该使用 setTimeout() ,它允许您在特定时间后异步执行函数。您可以从 setTimeout() 返回一个句柄,如果释放鼠标按钮,您可以使用它来中止超时。请参阅https://developer.mozilla.org/en/docs/Web/API/WindowTimers/setTimeout了解更多信息。

关于javascript - 与 getTime 一起使用的停止/中断函数执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738351/

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