Gre*_*ory 2 javascript google-maps
这是我的代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
当我按下时,increaseRad运行,但里面的 while 循环永远不会结束。
知道为什么吗?
这里的问题是您的代码作为阻塞循环运行。
while(mouseDown){
console.log("mouse is still down");
rad++;
console.log(rad)
}
Run Code Online (Sandbox Code Playgroud)
浏览器在单个线程中计算 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;
});
Run Code Online (Sandbox Code Playgroud)
这些异步操作(addEventListener、setTimeout)不会阻塞主线程。
| 归档时间: |
|
| 查看次数: |
14954 次 |
| 最近记录: |