当前位置: 首页 > 知识库问答 >
问题:

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

巴宏恺
2023-03-14

我试图创建一个简单的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;
};

有没有人能看到,或者已经知道,为什么左键会优先于右键?

已解决:

修正后的移动功能如下:

function move () {
    if (keyCodes[left] && velX > -12.0) {
        velX -= 2.0;
    }
    if (keyCodes[right] && velX < 12.0) {
        velX += 2.0;
    }
};

共有1个答案

都阳
2023-03-14

在您的函数中,您首先检查是否按下了右键,然后检查是否按下了左键。如果未按右键,则只应检查左键。

    ...

    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;

    ...
 类似资料:
  • 这些天,我阅读了一些关于和的文档。我了解到Javascript是一个单线程,每次只会执行一段代码。同时,如果有事件发生,它会被推送到事件队列中并阻塞,直到适当的时间。我想知道,当许多事件被阻塞等待同时执行时。这些事件是否具有不同的优先级,因此高优先级事件会在低优先级事件之前执行。或者只是一个FIFO队列。 在上面的代码中,setTimeout fn1将在10 ms发生,Click事件处理程序fn2

  • 本文向大家介绍什么是用例优先级?相关面试题,主要包含被问及什么是用例优先级?时的应答技巧和注意事项,需要的朋友参考一下 ② 高:最常执行以保证功能性是稳定的,目标的行为和能力可以正常的工作,和重要的错误和边界被测试的测试用例的集合。 ③ 中:这是使给出的功能区域或功能变得更详细,检查功能的多数方面包括边界,错误和配置测试的测试用例。 ④ 低:这是通常最少被执行的测试用例。但这并不意味着这些测试都不

  • 问题内容: JavaScript处理事件的优先顺序是什么? 以下是按字母顺序排列的事件… onabort-图像加载中断 onblur-元素失去焦点 onchange-用户更改字段的内容 onclick-鼠标单击对象 ondblclick-鼠标双击一个对象 onerror-加载文档或图像时发生错误 onfocus-元素获得焦点 onkeydown-按下键盘键 onkeypress-按下或按住键盘键

  • 问题内容: CSS问题:如果两个不同的选择器应用于一个元素,谁会赢? 我知道这不应该发生,但是我想调整旧应用程序,而CSS居于中间。 问题答案: 规范中的实际上是合理可读的。综上所述: 规则和内联规则获胜。 否则,通常会赢得更具体的胜利。是比更加具体的选择器。 如果规则同样具体,则以最后宣布的为准。 没有特别的理由说明为什么这种“不应该发生”。通常先指定一个广泛适用的规则,然后添加一个更具体的规则

  • 执行时将检索哪个bean? 根据Spring文档: 每个bean都有一个或多个标识符。这些标识符在承载bean的容器中必须是唯一的。 我有两个或 在同一个XML文件中有两个元素。

  • 我看到的替换优先级队列比较器的公认答案是在新的比较类中重载操作符。 然而,我想为队列实现几个(10)不同的比较函数,并在运行时在main()中创建pq时选择一个。我必须做10个不同的比较类还是有更简单的方法来做到这一点?