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

时间:2019-05-07 21:40:14

标签: javascript jquery socket.io

我有一个功能可以在我的网站上运行每一帧。里面有一个按键检查,如果我按下一个按键,它至少会被触发100次。我该如何预防?

我尝试使用等待功能降低FPS的速度,但是要使其正常工作,我必须将其降低到5 FPS左右,这太慢了。

下面是永久运行的函数中的代码(我使用的是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')

我甚至希望每秒发送5次(大约)按键,而不是像我正在经历的60-100次。

1 个答案:

答案 0 :(得分:0)

感谢keith回答了这个问题!

答案是使用debounce函数,效果很好!