我想使用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()
,或仅仅取而代之。我该怎么做才能实现我想要的结果?
答案 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;
这样做的好处是,您可以在按下按键时专门触发逻辑。
希望这有帮助! :)