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

时间:2016-08-03 08:29:36

标签: javascript

当我按下鼠标中键时,它会在一秒钟后在控制台中显示“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毫秒)

1 个答案:

答案 0 :(得分:1)

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