检测按下某个键然后使用jQuery释放

时间:2017-08-09 03:08:25

标签: javascript jquery keyboard jquery-events

我想使用jQuery检查按下然后释放按键的时间。只有在发布之后才能运行该函数(如果执行此操作的唯一方法不涉及jQuery,则可以,但如果有两种方法,我宁愿它是具有更少字节的那个)。 /> 我很确定该解决方案会混合使用keyup()keydown()keypress()函数,但我还没想出如何将它们链接起来以便代码可以接收期望的输出。我目前的代码是:

$("body").keydown(function(event) {
    $("body").keyup(function(event) {
        console.log("key pressed/released");
        var keyPressed = keys[event.keyCode];
        player.hit(keyPressed);
    });
});

但是,在我发布密钥后,这导致在控制台中记录了数十条key pressed/released条消息。当我按下某个键时,或者当我释放它时,取消keydown()keyup()会导致key pressed/released消息被记录。 keypress()也无法取代keydown()keyup(),或仅仅取而代之。我该怎么做才能实现我想要的结果?

3 个答案:

答案 0 :(得分:2)

  

我想使用jQuery检查按下然后释放按键的情况   只有在发布后我才能运行该功能

好吧,如果keyup被触发,你可以确定按键被释放了,否则该事件不会被触发,所以这就是你真正需要的。

$(document).on('keyup', function() {
    console.log('key was released')
})

或没有jQuery

document.addEventListener('keyup', function() {
    console.log('key was released')
});

您的代码最终记录数十个,然后是数百条消息的原因是因为您将事件绑定到事件处理程序中,这是禁止的。

答案 1 :(得分:0)

你可以创建一个变量,比如x。 x是假的。分离keyup和keydown函数。在keydown下添加一个if(!x)和make x true。在keyup下添加if(x)和make x false。 我不会编写jquery代码,但我认为这可能会有所帮助。

答案 2 :(得分:0)

诀窍是将两个函数分开,然后使用两个函数都可访问的变量。

首先说明没有按任何键。在keydown()内,运行一个条件来检查当前是否正在按下某个键。通过将key_pressed变量设置为条件内的true,您只需触发条件一次;当按键第一次时。

然后,当释放该键时,将变量设置回false以表示当前没有按下任何键。这将允许您在释放第一个键后按下辅助键,然后再次触发条件:



var key_pressed = false;

$("body").keydown(function(event) {
  if (!key_pressed) {
    console.log("key pressed");
    key_pressed = true;
  };
});

$("body").keyup(function(event) {
  key_pressed = false;
  console.log('key released');
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

这样做的好处是,您可以在按下按键时专门触发逻辑。

希望这有帮助! :)