Javascript 停止/中断与getTime一起工作的函数执行

Javascript 停止/中断与getTime一起工作的函数执行,javascript,Javascript,当我按下鼠标中键时,一秒钟后控制台显示“1秒后”。没关系,这就是我需要的。但如果我释放鼠标中键(mouseup listener),我也希望停止1秒延迟。但现在当'wait'函数执行'mouseup'时,监听器当然不会将'delay'变量更改为false(仅在经过1秒后)。但是我有什么办法可以做到吗?(停止“等待”功能,例如鼠标中键延迟0.5秒,而不是1秒) 函数等待(毫秒){ var start=new Date().getTime(); var结束=开始; 而((结束

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

函数等待(毫秒){
var start=new Date().getTime();
var结束=开始;
而((结束<开始+毫秒)和延迟==真){
end=新日期().getTime();
}
}
var延迟=假;
文件.添加的事件列表器(“鼠标向下”,函数(e){
如果(e.button==1){//1-鼠标中键
延迟=真;
等待(1000);//延迟1秒
控制台日志(“1秒后”);
}
});
文件.附录列表器(“鼠标”,函数(e){
如果(e.button==1){
延迟=错误;
}
});
更新:
我将替换
console.log(“1秒后”)
document.execCommand(“复制”)
,我们可以在Chrome浏览器中使用
setTimeout()
func延迟复制到剪贴板最多1秒,但在Firefox中使用
setTimeout()
,它将不起作用,但是
等待(999);document.execCommand('copy')
适用于Firefox(最大允许999毫秒)

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

我当时应该提到我真正想要的东西。我将替换
console.log(“1秒后”)
document.execCommand(“复制”)
,我们可以在Chrome浏览器中使用
setTimeout()
func延迟复制到剪贴板最多1秒,但在Firefox中使用
setTimeout()
,它将不起作用,但是
等待(999);document.execCommand('copy')
适用于Firefox(最大允许999毫秒)。如果无法从setTimeout()复制剪贴板,则没有解决方案。繁忙的等待将始终阻止您的鼠标移动事件。
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;
    }
});