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



我想用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()或单独使用。我应该怎么做才能达到我想要的结果?

我想使用 jQuery 检查何时按下然后释放一个键。
只有在发布后,我才希望运行该功能

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

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

或者没有 jQuery

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

您的代码最终记录数十条消息,然后是数百条消息的原因是您在事件处理程序中绑定了事件,这是不行的。

好吧,你可以创建一个变量,比如x。将键控和键下函数分开。在键下添加一个 if(!x( 并使 x 为真。在 keyup 下添加一个 if(x( 并使 x 为假。 我不编写jquery代码,但我认为这可能会有所帮助。

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

首先声明没有按下任何键。在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>

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

希望这有帮助! :)

最新更新