Keyboard 如何防止keyup事件中断jQuery中的keydown事件?

Keyboard 如何防止keyup事件中断jQuery中的keydown事件?,keyboard,jquery-animate,jquery,keyboard-events,Keyboard,Jquery Animate,Jquery,Keyboard Events,可能重复: 我试图用JavaScript/CSS/HTML创建一个简单的游戏,我使用jQuery(和一点下划线)来处理按键。玩家使用箭头键控制一个方块。我遇到了同时处理多个按键的问题。我有一个系统,在这个系统中,一个闭包跟踪所有被按下的箭头键。如果玩家按以下顺序按键,则效果良好: 玩家按下(方块向下移动) 玩家按下左键(方块向左斜向下移动) 玩家向下释放(方块向左移动) 球员向左释放(拦网) 但是,如果第3步和第4步相反,则块停止。在这种情况下,实际情况如下: 玩家按下(方块向下移动) 玩家按

可能重复:

我试图用JavaScript/CSS/HTML创建一个简单的游戏,我使用jQuery(和一点下划线)来处理按键。玩家使用箭头键控制一个方块。我遇到了同时处理多个按键的问题。我有一个系统,在这个系统中,一个闭包跟踪所有被按下的箭头键。如果玩家按以下顺序按键,则效果良好:

  • 玩家按下(方块向下移动)
  • 玩家按下左键(方块向左斜向下移动)
  • 玩家向下释放(方块向左移动)
  • 球员向左释放(拦网)
  • 但是,如果第3步和第4步相反,则块停止。在这种情况下,实际情况如下:

  • 玩家按下(方块向下移动)
  • 玩家按下左键(方块向左斜向下移动)
  • 球员向左释放(拦网)
  • 预期的行为是,在步骤3中,块将继续向下移动,而不是完全停止

    从我在代码中输入的跟踪来看,keyup事件似乎实际上停止了进一步的keydown事件的传播,即使我的手指仍按住其中一个箭头键

    这是一段相关代码。有人能告诉我问题出在哪里吗

    //为特定元素创建动画处理程序。
    //动画在提交任何更改时对其作出反应
    var getMovementAnimator=函数(元素){
    var params={},
    $element=$(element);
    返回函数(更改){
    _.每个(更改、功能(val、键){
    //从动画参数中删除空关键点或零关键点
    if((val==0 | | |!val)&&&&.has(参数,键)){
    删除参数[key];
    }否则{
    参数[键]='+='+val+'px';
    }
    });
    $element.animate(参数,{duration:0,queue:false});
    控制台日志(params);
    };
    };
    //确定图元的移动方向和速度
    //按键事件之后
    var getMovementChange=函数(keyEvent,keydown){
    var isMoving=!!按下键,
    params={},
    dir='',
    速度=按键按下?5:0,
    箭头={左:37,上:38,右:39,下:40};
    开关(keyEvent.which){
    大小写箭头。左:
    dir='左';
    速度=-速度;
    打破
    大小写箭头。向上:
    dir='top';
    速度=-速度;
    打破
    大小写箭头。右:
    dir='左';
    打破
    大小写箭头。向下:
    dir='top';
    打破
    }
    //如果按键未按上述任何一项,请不要执行任何操作
    如果(!dir){
    返回false;
    }
    如果(!速度){
    log('key up:',dir);
    }
    参数[dir]=速度;
    返回参数;
    }
    //设置密钥处理程序
    $(文档).ready(函数(){
    var board=$(“#board”),
    animatePlayer=getMovementAnimator('.player');
    $(文档).keydown(函数(e){
    e、 预防默认值();
    var changes=getMovementChange(e,true);
    动画图层(更改);
    }).keyup(功能(e){
    e、 预防默认值();
    var changes=getMovementChange(e,false);
    动画图层(更改);
    });
    });
    
    对堆栈溢出的进一步搜索(使用正确的关键字)表明,我看到的问题实际上不是代码中的错误

    然而,我发现