我有一个奇怪的问题。我正在使用以下代码来检测是否已按下某个键。如果按下了多个键,那么我将执行某些操作(无关紧要)。这在大多数情况下都有效,但是某些键组合(尤其是当我按下其中的三个键时)不会触发其中一个事件。
如果同时按下“ a”,“ s”,“ d”,则可以正常工作,在控制台上显示65
,83
和86
。但是,如果按“ s”,“ d”,“ e”,则只有两个代码会被打印,只有在释放所有键时才会出现第三个代码(不是没有登录keyUp
事件)。这仅在某些按键组合时发生。
我在Mac OS Sierra 10.12.5上使用Chrome 59.0.3071.86。我也在Safari上尝试过,它也有同样的问题。
window.onkeydown = onKeyDown;
window.onkeyup = onKeyUp;
var lastEvent;
function onKeyDown(e){
if (lastEvent && lastEvent.type == e.type && lastEvent.keyCode == e.keyCode) {
return;
}
console.log(e.keyCode);
// do stuff
lastEvent = e;
}
function onKeyUp(e){
if (lastEvent && lastEvent.type == e.type && lastEvent.keyCode == e.keyCode) {
return;
}
// do stuff
lastEvent = e;
}
最佳答案
我在这里可能是完全错误的,但这对我来说听起来像是一个键盘问题,称为重影。例如,现代游戏键盘通过在内部管理按键的缓冲区来解决此问题。
您可以在这里测试是否存在这种情况:https://www.microsoft.com/appliedsciences/KeyboardGhostingDemo.mspx