Javascript 'keydown' 事件监听器不工作

标签 javascript keydown event-listener

每次我在 Canvas 上移动时,mousemove 事件都会起作用并调用 onMouseMove。虽然,keydown 和 keyup 事件永远不会起作用。我单击 Canvas 并按下一些键,但没有触发任何事件。有谁知道为什么这些事件不起作用?谢谢你的任何建议! 如果有人好奇代码的来源,我正在学习关于 udacity 的 html5 类(class)。

InputEngineClass = Class.extend({

keyState: new Array(),

setup: function() {
    document.getElementById("gameCanvas").addEventListener('mousemove', gInputEngine.onMouseMove);
    document.getElementById("gameCanvas").addEventListener('keydown', gInputEngine.onKeyDown);
    document.getElementById("gameCanvas").addEventListener('keyup', gInputEngine.onKeyUp);
},

onMouseMove: function (event) {
    console.log("Called onMouseMove");
    var posx = event.clientX;
    var posy = event.clientY;
},

onKeyDown: function (event) {
    console.log("KEY DOWN!!!");
    keyState[event.keyID] = true;
    gInputEngine.update();
},

onKeyUp: function (event) {
    console.log("KEY UP!!!");
    keyState[event.keyID] = true;
},  

update: function() {
    KeyW = 87;

    if(gInputEngine.keyState[KeyW]) console.log("FORWARD!!!");   
}  
});

gInputEngine = new InputEngineClass();

最佳答案

我会把我的评论变成一个答案,这样你就可以结束这个问题了。

要让 DOM 对象接收键盘事件,它们必须首先能够获得页面上的键盘焦点。只有这样,键盘事件才会指向该对象。为 Canvas 对象执行此操作的最简单方法是为其提供 tabIndex 属性。

canvas.setAttribute("tabindex", 0);

您可以在此处查看其他人对该问题的总结:http://www.dbp-consulting.com/tutorials/canvas/CanvasKeyEvents.html

关于Javascript 'keydown' 事件监听器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18928116/

相关文章:

javascript - 使用 ES6 箭头函数设置事件监听器

带有 eventListener 的 Javascript 代码不适用于视频按钮控制系统

javascript - 在 Ember 中,如何在多个地方使用的组件中拥有不同的 html?

javascript - 使用 Ctrl 按钮按下 keydown

keydown - Vue Test Utils,测试中的 keyCode 不再触发 Keydown 事件

java - 如何防止轻量级组件接收鼠标事件?

javascript - 如何使用 jQuery 限制通过鼠标单击在文本区域中粘贴的文本?

javascript - 是否可以在浏览器上的node.js上运行JavaScript(不是cmd)

asp.net - 如何开始创建选择脚本, "inspect like what firebug do"?

c# - 无法正确使用KeyDown和KeyUp事件? (Visual C# Windows 窗体)