javascript键控事件的优先级是什么(如果有)?

javascript键控事件的优先级是什么(如果有)?,javascript,events,keydown,operator-precedence,Javascript,Events,Keydown,Operator Precedence,我正在尝试创建一个简单的javascript程序,该程序读取keydown事件并将它们转换为HTML画布上的运动。到目前为止,我已经取得了相当大的成功,我对箭头键的优先顺序有一个奇怪的问题。发生的情况是,如果我按住右箭头,按下左箭头,左箭头就会接管。如果按住左箭头并按下右箭头,则不会发生任何变化(我移动的块继续向左移动)。我已经改变了按键的读取顺序,但是没有成功 我读取键控和键控的代码如下: //Listener for when keys are pressed window.addEvent

我正在尝试创建一个简单的javascript程序,该程序读取keydown事件并将它们转换为HTML画布上的运动。到目前为止,我已经取得了相当大的成功,我对箭头键的优先顺序有一个奇怪的问题。发生的情况是,如果我按住右箭头,按下左箭头,左箭头就会接管。如果按住左箭头并按下右箭头,则不会发生任何变化(我移动的块继续向左移动)。我已经改变了按键的读取顺序,但是没有成功

我读取键控和键控的代码如下:

//Listener for when keys are pressed
window.addEventListener('keydown', function (event) {
    keyCodes[event.keyCode] = true;
});

//Listener for keys being released
document.addEventListener('keyup', function (event) {
    keyCodes[event.keyCode] = false;
});
然后在这里进行解释

//movement function
function move () {
    if (keyCodes[right]) {
        velX = 12.0;
    }
    if (keyCodes[left]) {
        velX = -12.0;
    }
};

function update() {
    if (keyCodes[right] || keyCodes[left])
        move();

    posX += velX;

    if (!keyCodes[right] && velX > 0)
        velX -= gravity;
    if (!keyCodes[left] && velX < 0)
        velX += gravity;
};
//移动函数
函数移动(){
如果(键代码[右]){
velX=12.0;
}
如果(键代码[左]){
velX=-12.0;
}
};
函数更新(){
if(键码[右]| |键码[左])
move();
posX+=velX;
如果(!keyCodes[右]&&velX>0)
velX-=重力;
如果(!keyCodes[左]&&velX<0)
velX+=重力;
};
有人能看到,或者已经知道,为什么左键优先于右键

已解决:

修正后的移动功能如下:

function move () {
    if (keyCodes[left] && velX > -12.0) {
        velX -= 2.0;
    }
    if (keyCodes[right] && velX < 12.0) {
        velX += 2.0;
    }
};
函数移动(){
if(按键代码[左]&&velX>-12.0){
velX-=2.0;
}
if(按键代码[右]&&velX<12.0){
velX+=2.0;
}
};

在您的函数中,首先检查是否按了右键,然后检查是否按了左键。只有在未按下右键的情况下,才应检查左键

    ...

    if (keyCodes[right]) {
        velX = 12.0;
    }
    // note the "else" before the "if"
    else if (keyCodes[left]) {
        velX = -12.0;
    }

    ...

    if (!keyCodes[right] && velX > 0)
        velX -= gravity;
    // again note the "else"
    else if (!keyCodes[left] && velX < 0)
        velX += gravity;

    ...
。。。
如果(键代码[右]){
velX=12.0;
}
//注意“如果”之前的“else”
否则如果(键代码[左]){
velX=-12.0;
}
...
如果(!keyCodes[右]&&velX>0)
velX-=重力;
//再次注意“else”
如果(!keyCodes[左]&&velX<0),则为else
velX+=重力;
...

您说的是同时按下两个键?不同浏览器的行为是否相同?作为测试,我建议您颠倒
move()
update()
if
语句的顺序(首先测试
keyCodes[左]
值)。看看这是否会改变行为。如果是这样,问题在于你处理事件的逻辑。如果不是,这可能是JS在处理多个按键(可能是特定于浏览器)时的某种模糊性。是的,同时按下两个键。我试过跨浏览器,结果也一样,更改处理顺序也没有帮助。更正:重新排序导致了相反的结果。我以前重新订购时一定错过了。谢谢你的帮助!