【发布时间】:2015-05-21 14:35:57
【问题描述】:
我正在使用一些教程制作一个画布游戏,并针对一些 AI 交互进行了调整。游戏运行良好,只是我的事件侦听器此时刚刚添加到文档中。当我将游戏移动到我的实际网站时,这成为一个问题,因为我需要e.preventDefault 以防止页面滚动。直到人们想输入我的联系表格并且他们无法使用空格键或箭头键之前,这没什么大不了的。足够简单的修复似乎只是将事件侦听器添加到我的画布中。
但是,当我使用 canvas.addEventListener() 和我使用它之前的相同参数时,我无法让画布关注事件。他们似乎根本没有注册。我曾尝试单击画布以使其“集中”,但这似乎没有任何作用。
所以问题是我怎样才能让画布只有画布才能监听 keydown 事件?
这可行,但会破坏我的表单
addEventListener('keydown', function(e) {
keysDown[e.keyCode] = true;
switch(e.keyCode) {
case 37: case 38: case 39: case 40:
case 32: e.preventDefault(); break;
default: break;
}
}, false);
这不起作用
var canvas = document.getElementById('world');
canvas.addEventListener('keydown', function(e) {
keysDown[e.keyCode] = true;
switch(e.keyCode) {
case 37: case 38: case 39: case 40:
case 32: e.preventDefault(); break;
default: break;
}
}, false);
【问题讨论】:
-
能否提供一个事件注册的示例代码?
-
如果您需要更多信息,请告诉我?我想我处理了你的要求? keysDown 数组在我的主游戏循环中得到处理,并且在 case 32 上有更多代码来启动游戏。我在事件监听器函数中放了一个 console.log,当我有 canvas.add 而不是 add 时不会打印
-
你在哪里声明
keysDown[e.keyCode]数组? -
以上几行。只是一个空数组。在 keyup 上,我删除了该键码。这不是问题的一部分,因为该代码之前的 console.log 不会触发。
标签: javascript html canvas addeventlistener