假设我有如下代码块:
keysPressed = new Object();
document.onkeydown = function(e) {
keysPressed[e.charCode] = true;
}
document.onkeyup = function(e) {
keysPressed[e.charCode] = false;
}
从理论上讲,这应该让我留下一个对象,在该对象中我可以进入
keysPressed.w
来检查当前是否按下了“ w”。我可以在JavaScript控制台中看到所有属性的定义都像普通一样,但是每当我尝试访问它们时,它都表明它们是未定义的。我怀疑属性在定义它们的函数内部具有局部作用域,并且无法在其他地方访问。有什么方法可以解决这个问题,而无需创建一堆全局变量?
提前致谢!
最佳答案
这里的问题是charCode
返回一个数字值。因此,不是为w
添加属性,而是为数字87
添加属性。您想使用String.fromCharCode
在此处获取字符串表示形式
keysPressed = new Object();
document.onkeydown = function(e) {
keysPressed[String.fromCharCode(e.charCode)] = true;
}
document.onkeyup = function(e) {
keysPressed[String.fromCharCode(e.charCode)] = false;
}
现在,如下所示的代码将起作用(注意使用大写W而不是小写)
if (keysPressed.W) {
...
}