mousedown事件可以在循环中发生吗?

时间:2014-09-03 09:33:40

标签: javascript game-loop

我正在试图弄清楚用户操作触发的事件是如何发生的。

在下面的例子中,事件是否会发生在两个函数之间,导致只执行第二个函数?

var mouseDown = false;

element.addEventListener('mousedown', function(evt) {
    mouseDown = true;
}, false);

function loop() {
    doSomething();

    // Can mouseDown be set to true here?

    doSomethingElse();

    mouseDown = false;

    requestAnimationFrame(loop);
}

function doSomething() {
    if (mouseDown) {
        // Do something
    }
}

function doSomethingElse() {
    if (mouseDown) {
        // Do something else
    }
}

是否会发生这种情况,或者是在循环之间推迟的事件?

1 个答案:

答案 0 :(得分:1)

不,这绝不会发生 *

Javascript事件处理是单线程的,这意味着只要您的代码正在运行,就不会处理任何事件。

退出函数(loop)并将控制权返回给浏览器时,可以恢复事件处理。


(*)例外情况是,如果您在该代码中有alert之类的对话框,那么在某些浏览器中可能会处理某些事件。