我想用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>
这样做的好处是,您可以在按住键时专门触发逻辑。
希望这有帮助! :)