当我按下鼠标中键时,它会在一秒钟后在控制台中显示“1秒后”。没关系,这就是我需要的。但是如果我释放鼠标中键(mouseup listener),我也想停止1秒延迟。但是现在'wait'函数执行'mouseup'监听器当然不会将'delay'变量改为false(仅在1秒后通过)。但是我有什么方法可以做到吗? (停止'等待'功能,例如当它在鼠标中键上延迟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;
}
});
更新
我要用console.log("after 1 sec");
替换document.execCommand("copy");
,我们可以使用setTimeout()
func在Chrome浏览器中将复制延迟到剪贴板最多1秒,但在{setTimeout()
fq的Firefox中无效1}},但wait(999); document.execCommand('copy');
适用于Firefox(允许最大999毫秒)
答案 0 :(得分:1)
你的问题是mousedown监听器函数将阻止进一步执行,直到它完成。您的等待函数实现了所谓的“忙等待”。您应该使用setTimeout()
,它允许您在特定时间后异步执行函数。您可以从{{1}}获得一个句柄,如果释放鼠标按钮,可以使用该句柄中止超时。有关详细信息,请参阅https://developer.mozilla.org/en/docs/Web/API/WindowTimers/setTimeout。