简体   繁体   English

如何防止按键被反复触发 - JavaScript / jQuery

[英]How do I prevent key press from repeatedly being fired - JavaScript/jQuery

I have a function that runs every frame on my website. 我有一个在我的网站上运行每一帧的功能。 Inside it, there is a key press check, that if I press a key, it gets fired at least a 100 times. 在它内部,有一个按键检查,如果我按下一个键,它至少会被触发100次。 How can I prevent this? 我怎么能阻止这个?

I've tried slowing down my FPS using a wait function, but to get it to work I have to slow it down to around 5 FPS, which is too slow. 我已经尝试使用等待功能减慢我的FPS,但为了让它工作,我必须将它减慢到大约5 FPS,这太慢了。

Here is the code inside the function that runs forever (I'm using socket.io, so there is a bit of that in there. Don't mind it): 这是函数内部的代码,它永远运行(我正在使用socket.io,所以那里有一些。不要介意):

    // Rendering
    $('#svg').empty();
    for (var i = 0; i < players.length; i++){
      var circle = makeSVG('circle', {cx: players[i].x, cy: players[i].y, r: '5vw', stroke: '#00FFFF', 'stroke-width': '0px', fill: '#00FFFF'})
      document.getElementById('svg').appendChild(circle);
    }

    // Key Press
    $(document).keydown(function(e) {
      switch(e.which) {
          case 37: // left
            socket.emit('update', 'left');
            break;

          case 38: // up
            socket.emit('update', 'up');
            break;

          case 39: // right
            socket.emit('update', 'right');
            break;

          case 40: // down
            socket.emit('update', 'down');
            break;

          default:
          break;
      }
      e.preventDefault(); // prevent the default action (scroll / move caret)
    });

    socket.emit('update', 'No Keys')

I want the key press even to be sent 5 (about) times a second, not 60-100 like I am experiencing. 我希望按键甚至每秒发送5次(约)次,而不是像我正在经历的那样发送60-100次。

Thanks to keith for answering this question! 谢基思回答这个问题!

The answer was to use the debounce function, which worked extremely well! 答案是使用去抖功能,它非常好用!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM