第一个代码--> 我的第一个示例不起作用,我不确定为什么。我会说一个条件,比如if(keys[38])
示例中的 38 将是event.keyCode
.如果为 true,则它应执行 if 语句。
第二个代码 -> 第二个示例仅在推送一个键时才有效,我也不确定为什么它不适用于多个键。对于多个键,我会说类似 if(keys[38] && keys[40])
,但这行不通,但是应该注意的是,它仅适用于一个键,例如 if(keys[38])
.
我知道还有其他方法可以让它工作,但我的目标是弄清楚为什么这些代码片段不起作用。
第一个代码片段:
var keys = [];
addEventListener("keydown", function(event) {
keys[event.keyCode] = event.type == "keydown";
event.preventDefault();
});
/*conditions*/
第二个代码片段:
var keys = [];
addEventListener("keydown", function(event) {
keys[event.keyCode] = event.type == "keydown";
event.preventDefault();
/* conditions with multiple keys accessing by if(keys[38] && keys[40]*/
});
提前感谢:)
当您按下多个键时,addEventListener 将不再侦听您的第一次按键。这就是你的 if 语句失败的原因。您可以在第一个示例中进行测试 http://api.jquery.com/event.which/尝试按住一个键,然后按住第二个键,然后松开第二个键。您会注意到,将不再记录第一个密钥。
*编辑:解决方法是像这样实现它:
var keys = {};
$(document).keydown(function (e) {
keys[e.which] = true;
});
$(document).keyup(function (e) {
delete keys[e.which];
});
不同之处在于,在这种情况下,没有任何东西被覆盖,而在您的示例中,您的第一次按键被第二次按键覆盖(并且不再保存)。