在JQuery中,我知道有一个名为Long
的函数,但这确实允许我在每次调用回调时设置超时。
keydown
$(document).keydown(() => {
//do stuff
});
每次调用都太快。我想在用户按住键时每500毫秒调用一次。有什么办法吗?
答案 0 :(得分:3)
我不确定这是否是最好的方法,但这可以解决您的问题
aggregate
答案 1 :(得分:1)
这是您要找的东西吗? (在此示例中,我使用了一个按钮)
const button = document.querySelector('#press');
let interval;
button.onmousedown = () => {
interval = setInterval(() => {
console.log('every 500ms');
}, 500);
}
button.onmouseup = () => {
clearInterval(interval);
}
当用户按下按钮并保持按下状态时,消息将每500毫秒记录到控制台一次。当用户不再按下按钮时,控制台日志记录将停止。
更新:此方法不适用于按键事件,仅适用于鼠标。我相信@Ahmet Zeybek的答案正确。
答案 2 :(得分:1)
我对JQuery不熟悉,但是...
这是一个结果与其他答案略有不同的解决方案。
500毫秒计时器不依赖于按键。
let isAHeld = false;
$(document).keydown((event) => {
if (event.key === 'a') {
isAHeld = true;
}
});
$(document).keyup((event) => {
if (event.key === 'a') {
isAHeld = false;
}
});
$(document).ready(() => {
setInterval(() => {
const result = $("#result")[0];
if (result && isAHeld) {
result.innerHTML += " A!";
}
}, 500);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>Click here to give focus, then press and hold "a".</div>
<div id="result">Output:</div>
答案 3 :(得分:1)
如果您要在 期间每500ms调用一次操作,则用户按住一个键,请尝试以下代码段。
请记住,对于某些键(例如“空格”,字母等),按下按键事件将被称为多次,直到您停止按该键为止,而对于其他键(例如“ strg”或“ cmd”中的按键事件将仅被调用一次。这种方法应该适合两种情况。
var timer1 = null;
var time = 500;
$(document).on('keydown', function() {
//console.log('keydown has been called');
// init once, because for some keys (e.g. space, letters, etc.)
// this handler will be called consistently while you press the button.
// some other buttons like "strg", "cmd", etc. will be called once only
if (timer1 === null) {
// now from exec each 500ms
timer1 = setInterval(function() {
$('body').append('<div>I will be called each 500ms</div>')
}, time);
}
});
$(document).on('keyup', function() {
clearInterval(timer1);
timer1 = null;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Click me to get focus and then press a key for 500ms or longer.</p>
这里是小提琴:https://jsfiddle.net/8Lzwupvo/
最初延迟500毫秒的小提琴:https://jsfiddle.net/92mLx7kj/1/