我的问题是,我最近开始将HTML5 Web应用程序更改为使用全屏+指针锁定,而不是在窗口中拖动鼠标。该应用程序除了使用鼠标外,还使用键盘,以前一切都很好。然而,现在我无法让任何类型的按键工作。指针锁定鼠标可以完美工作。
以前我听过这样的按键:
document.onkeydown = handleKeyDown;
document.onkeyup = handleKeyUp;
其中handleKeyDown
和Up是函数,例如:
function handleKeyUp(event) {
doStuffWith(event.keyCode);
}
现在,我在mousemove
监听器旁边添加了键盘监听器:
document.addEventListener('keyup', handleKeyUp(event), false);
document.addEventListener('keydown', handleKeyDown(event), false);
其中handleKey
*与上述相同,但doStuffWith
不起任何作用。它似乎得到了一些未定义的事件,而没有其他任何东西。这可能是一个相当初级的问题,但我很难解决。我在谷歌上找到的大多数例子和教程都没有使用addEventListener
,而是使用我以前使用的旧风格。
我非常感谢你的帮助。
edit//澄清:由于事件是未定义的,因此根本不会调用doStuffWith
,因为在尝试读取未定义的.keyCode
时执行停止
主要问题是,根据以下MDN页面,字母数字键在全屏模式下被禁用:
https://developer.mozilla.org/en/DOM/Using_full-screen_mode#Things_your_users_want_to_know
您的代码也存在一些问题。在线
document.addEventListener('keyup', handleKeyUp(event), false);
您有两个问题:第一,第二个参数需要是对函数的引用。它实际上是对undefined
的引用,因为您要立即调用函数并传递结果,而不是传递函数。其次,在支持addEventListener
的浏览器中,Event
对象会自动传递到事件侦听器函数中。因此,你想要的是:
function handleKeyUp(e) {
doStuffWith(e.keyCode);
}
document.addEventListener('keyup', handleKeyUp, false);