我实施了以下内容:
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');
}
}
如果我现在按下键盘上的向上按钮,那么我的控制台将反复记录“向上”。当我按住向上按钮并开始按下左按钮时,我的控制台开始反复记录“向左”。
现在我释放了左键,我的控制台只记录一次“up”但不再重复记录。
我怎样才能做到这一点?
我试图在StackOverflow上找到答案。但我发现解决方案只是在我释放左键后才“记录”一次。
任何人都可以帮忙或至少给出一个提示吗?
答案 0 :(得分:0)
现在我发布左键,我的控制台只记录一次" up"但是 不要再反复登录了。
这是处理关键事件的默认行为,即使在常见的文本编辑器上,如this answer.
所述我怎样才能做到这一点?
如果通过这个问题,你的意思是如何继续打印" up"当按下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();