使用 jQuery 检测何时按下然后释放
Detect when a key is pressed and then released using 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()
或单独使用。我应该怎么做才能达到我想要的结果?
那么你可以创建一个变量,比如 x。 x 是错误的。将 keyup 和 keydown 功能分开。在 keydown 下添加一个 if(!x) 并使 x 为真。在 keyup 下添加一个 if(x) 并使 x 为假。
我不编写代码 jquery,但我认为这可能会有所帮助。
I would like to check, using jQuery, when a key is pressed and then released.
Only after the release do I want the function to be run
好吧,如果 keyup
被触发,您可以确定按键既被按下又被释放,否则该事件不会被触发,所以这就是您所需要的。
$(document).on('keyup', function() {
console.log('key was released')
})
或没有jQuery
document.addEventListener('keyup', function() {
console.log('key was released')
});
您的代码最终会记录数十条、然后是数百条消息的原因是您在事件处理程序中绑定了事件,这是一个禁忌。
诀窍是将两个函数分开,然后使用两个函数都可以访问的变量。
首先声明没有按下任何键。在您的 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>
这样做的好处是您可以在按住按键时专门触发逻辑。
希望对您有所帮助! :)
我想使用 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()
或单独使用。我应该怎么做才能达到我想要的结果?
那么你可以创建一个变量,比如 x。 x 是错误的。将 keyup 和 keydown 功能分开。在 keydown 下添加一个 if(!x) 并使 x 为真。在 keyup 下添加一个 if(x) 并使 x 为假。 我不编写代码 jquery,但我认为这可能会有所帮助。
I would like to check, using jQuery, when a key is pressed and then released.
Only after the release do I want the function to be run
好吧,如果 keyup
被触发,您可以确定按键既被按下又被释放,否则该事件不会被触发,所以这就是您所需要的。
$(document).on('keyup', function() {
console.log('key was released')
})
或没有jQuery
document.addEventListener('keyup', function() {
console.log('key was released')
});
您的代码最终会记录数十条、然后是数百条消息的原因是您在事件处理程序中绑定了事件,这是一个禁忌。
诀窍是将两个函数分开,然后使用两个函数都可以访问的变量。
首先声明没有按下任何键。在您的 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>
这样做的好处是您可以在按住按键时专门触发逻辑。
希望对您有所帮助! :)