如果按键持续500毫秒触发功能

时间:2020-01-12 01:24:47

标签: javascript jquery

在JQuery中,我知道有一个名为Long的函数,但这确实允许我在每次调用回调时设置超时。

keydown

$(document).keydown(() => { //do stuff }); 每次调用都太快。我想在用户按住键时每500毫秒调用一次。有什么办法吗?

4 个答案:

答案 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/