按下键在第一次按键和随后的按键后暂停

Keydown pauses after first keyress, and subsequent keypresses

本文关键字:暂停 第一次      更新时间:2023-09-26

转到此处

使用向上和向下键

当我按下一个键时,红色框向下移动,暂停,然后移动其余部分。

如何消除暂停?

您应该遵循keydownkeyup,并使用间隔更平稳地移动桨。

演示:http://jsfiddle.net/M7TKc/16/

var paddle = $("#paddle");
paddle.css({backgroundColor: "red", height:"100px", width:"25px", position: "absolute"});
var paddle_y = 0,
    moving = 0;  /* added */
draw_paddle();
window.setInterval(function () {  /* added */
    if (moving != 0) {
        paddle_y += moving;
        draw_paddle();
    }}, 100);
function move_down(){
    moving = -10;
}
function move_up(){
    moving = 10;
}
function draw_paddle(){
    paddle.css({top: paddle_y+"px"});
}
$(document).keypress(function(e) {
    if(e.which == 13) {
        // stop on "ENTER"
        moving = 0;
    }
});
$(document).keydown(function(e){  /* changed */
    if (e.keyCode == 38)
        move_down();
    else if (e.keyCode == 40)
        move_up();
});
$(document).keyup(function(e){  /* added */
    if (e.keyCode == 38 || e.keyCode == 40)
        moving = 0;
});

您不能,因为它取决于操作系统键盘设置,以防止在键的长按压下键入多个字母。

PS:不要为要监视的每个密钥注册一个事件。请改为执行以下操作:

$(document).keydown(function(e){
    if (e.keyCode == 38) { 
        move_down();
        return true;
    } else if (e.keyCode == 40) { 
        move_up();
        return true;
    }
});​

而且return true;实际上并没有做任何有意义的事情......

你实际上应该做的是使用keydown和键控events来做他们在游戏中应该做的事情(我认为是这样),即开始和停止运动。

您应该使用 setInterval 更新函数来更新您的位置。键控和键下功能将设置向上或向下移动球拍的标志。演示:http://jsfiddle.net/DH5qT/

    var movedir = 0; // up if 1, down if -1, none if = 0.
    var interval = setInterval(function(){
        paddle_y = paddle_y + (5 * movedir);
        draw_paddle();
    } , 1);
    function move_down(){
        movedir = -1;
        draw_paddle();
    }
    function move_up(){
        movedir = 1;
        draw_paddle();
    }