如何在开键后触发下键?



我实现了以下内容:

var map = {};
document.onkeydown = document.onkeyup = function(e){
e = e || event;
map[e.keyCode] = e.type == 'keydown';
if(map[38] && map[37]){ // UP + LEFT
console.log('Up Left');
}
else if(map[38] && map[39]){ // UP + RIGHT
console.log('Up Right');
}
else if(map[38]){ // UP
console.log('Up');
}
else if(map[40]){ // DOWN
console.log('Down');
}
else if(map[37]){ // LEFT
console.log('Left');
}
else if(map[39]){ // RIGHT
console.log('Right');
}
}

如果我现在按下键盘上的向上按钮,那么我的控制台将反复"向上"登录。当我按住向上按钮并开始同时按下左按钮时,我的控制台开始反复记录"向左"。

现在我释放左按钮,我的控制台只记录一次"向上",但不再重复记录它。

我怎样才能做到这一点?

我试图在StackOverflow上找到答案。但我只找到了在我释放左按钮后它只"启动"一次的解决方案。

任何人都可以帮忙或至少给出一个提示吗?

现在我释放左按钮,我的控制台只记录一次"向上",但 不再重复记录它。

这是处理关键事件的默认行为,即使在常见的文本编辑器上也是如此,如本答案中所述。

我怎样才能做到这一点?

如果您通过这个问题的意思是在按下UP键时如何继续打印"向上",则必须更改方法。

一种可能的方法是将按下的键的状态保存在地图字段上,并在短时间内重复输出状态。例如,请尝试改用以下代码:

var map = {};
document.onkeydown = document.onkeyup = function(e){
map[e.keyCode] = e.type == 'keydown';
}
logKeyState = function(){
if(map[38] && map[37]){ // UP + LEFT
console.log('Up Left');
}
else if(map[38] && map[39]){ // UP + RIGHT
console.log('Up Right');
}
else if(map[38]){ // UP
console.log('Up');
}
else if(map[40]){ // DOWN
console.log('Down');
}
else if(map[37]){ // LEFT
console.log('Left');
}
else if(map[39]){ // RIGHT
console.log('Right');
}
setTimeout(logKeyState,50);
}
//Start logging  
logKeyState();

相关内容

  • 没有找到相关文章

最新更新