gpt4 book ai didi

javascript - 在 Javascript 中检测按住鼠标单击

转载 作者:行者123 更新时间:2023-12-05 09:20:47 24 4
gpt4 key购买 nike

这是我的代码:

var mouseDown = false;

document.body.onmousedown = function() {
console.log("MOUSE DOWN");
mouseDown = true;
increaseRad();
}
document.body.onmouseup = function() {
console.log("MOUSE UP");
mouseDown = false;
}

function increaseRad(){
rad = 0;
while(mouseDown){
console.log("mouse is still down");
rad++;
console.log(rad)
}
}

当我按下时,increaseRad 运行,但内部的 while 循环永远不会结束。

知道为什么吗?

最佳答案

这里的问题是您的代码作为阻塞循环运行。

while(mouseDown){
console.log("mouse is still down");
rad++;
console.log(rad)
}

浏览器在单个线程中评估 Javascript,并且此循环永远不会暂停让浏览器处理这些事件处理程序。

相反,您可以只使用异步函数来监听 mousedown 事件,然后启动计时器。如果计时器结束时鼠标仍处于按下状态,则您可以将其计为长按。

var mouseIsDown = false;

window.addEventListener('mousedown', function() {
mouseIsDown = true;
setTimeout(function() {
if(mouseIsDown) {
// mouse was held down for > 2 seconds
}
}, 2000);
});

window.addEventListener('mouseup', function() {
mouseIsDown = false;
});

这些异步操作(addEventListenersetTimeout)不会阻塞主线程。

关于javascript - 在 Javascript 中检测按住鼠标单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36011249/

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