【问题标题】:Javascript keydown events only firing for maximum of two keysJavascript keydown 事件仅触发最多两个键
【发布时间】:2013-03-18 03:46:39
【问题描述】:

我有一个用于捕获和注册箭头键输入的系统。它一直有效。只要按下两个或更少的键,它就会正确记录是否同时按下多个键。如果同时按下第三个或第四个,它将停止触发 keydown 事件。请查看this jsFiddle 并查看控制台的输出。

这是浏览器设置的限制还是我的代码错误?任何帮助将不胜感激。

代码如下:

var keysPressed = {
    37: false,
    38: false,
    39: false,
    40: false
};
var LEFT = 'left';
var RIGHT = 'right';
var UP = 'up';
var DOWN = 'down';
var ON = '_on';
var OFF = '_off'

document.addEventListener('keydown', function(evt){
    var keycode = evt.keyCode;
    if(!checkKeyPressed(keycode)){
        keysPressed[keycode] = true;
        switch(keycode){
            case 37: 
                registerInput(LEFT+ON);
                break;
            case 38:
                registerInput(UP+ON);
                break;
            case 39:
                registerInput(RIGHT+ON);
                break;
            case 40:
                registerInput(DOWN+ON);
                break;
            default:
                break;
        }
    }
});

document.addEventListener('keyup', function(evt){
    var keycode = evt.keyCode;
    if(checkKeyPressed(keycode)){
        keysPressed[keycode] = false;
        switch(keycode){
            case 37: 
                registerInput(LEFT+OFF);
                break;
            case 38:
                registerInput(UP+OFF);
                break;
            case 39:
                registerInput(RIGHT+OFF);
                break;
            case 40:
                registerInput(DOWN+OFF);
                break;
            default:
                break;
        }
    }
});

function checkKeyPressed(keycode){
    if (keysPressed === null) {
        return false;
    } else return keysPressed[keycode];
}

function registerInput(inputType){
    console.log(keysPressed);
    //Game.Engine.playerInput(inputType);
}

【问题讨论】:

    标签: javascript browser keyboard keyboard-events dom-events


    【解决方案1】:

    虽然这不一定是我的实现方式,但我认为您的实现效果很好。

    记住这一点:

    不同的键盘有不同的按键总线。
    在更高质量的键盘上,您可能会在每次可以按住的键盘“区域”获得更多按键...
    但是根据键盘是什么、按键的打印方式、区域的划分方式等等,您将有更多或更少的按键可以一次在任何给定位置使用。

    例如,当我玩 FPS 游戏和类似动作游戏时,使用常规映射时,我无法在键盘上同时蹲下、向前+向左移动、拉起排行榜和重新加载。

    我最后做的任何事情都会被忽略。

    【讨论】:

    • 我可以让所有四个同时在控制台对象中回显true,所以是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多