【问题标题】:keydown event not fired, why?keydown 事件未触发,为什么?
【发布时间】:2014-10-08 17:20:48
【问题描述】:

在 JavaScript 中,我按住两个键,keydown 被完美触发。当我释放其中一个键时,keyup被触发。到现在为止还挺好。但是我仍然按住一个键,为什么没有解雇keydown?我需要在我的游戏中发生这种情况。难道我做错了什么?这是预期的反应吗?有什么解决办法吗?

window.addEventListener("keydown",
function (e) {
    console.log('down');
}, false);

window.addEventListener('keyup',
function (e) {
    console.log('up');
}, false);

【问题讨论】:

  • 不确定我是否在关注,但为什么 keydown 会再次触发已经触发但您尚未释放的键?
  • Keydown 在按键按下时反复触发,但似乎如果他按下另一个键然后进行 keyup,第一个键停止触发 keydown。 Keypress 只会触发一次
  • Keydown 反复触发...?嗯。这对我来说实际上是个新闻。
  • @radbyx 是操作系统的标准行为,而不是错误:stackoverflow.com/questions/5841853/…。取决于你想要做什么,你可以这样做:stackoverflow.com/questions/14027818/…
  • 没问题,祝你的游戏好运!

标签: javascript events


【解决方案1】:

在我看来你正在尝试做这样的事情:

var down = false;
var up = false;
document.body.addEventListener('keydown', function (e) {
    if(e.which === 40) {
        down = true;
    }
    
    if(e.which === 38) {
        up = true;
    }
});

document.body.addEventListener('keyup', function (e) {
    if(e.which === 40) {
        down = false;
    }
    
    if(e.which === 38) {
        up = false;
    }
    
    // logic here for one but not the other
    if(down && !up) {
        alert('down but not up!');
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多