Javascript JS Keydown在第一个事件之后触发事件之前有一些奇怪的1秒延迟

Javascript JS Keydown在第一个事件之后触发事件之前有一些奇怪的1秒延迟,javascript,vue.js,keydown,Javascript,Vue.js,Keydown,我试图在Vue.js中创建场景中的角色移动 我为左右按钮添加了一个键绑定: created () { window.addEventListener('keyup', this.keyup) window.addEventListener('keydown', this.keydown) } 以下是方法: keydown (e) { if (e.keyCode === 37) this.onWalkLeftPressed() if (e.

我试图在Vue.js中创建场景中的角色移动

我为左右按钮添加了一个键绑定:

  created () {
    window.addEventListener('keyup', this.keyup)
    window.addEventListener('keydown', this.keydown)
  }
以下是方法:

    keydown (e) {
      if (e.keyCode === 37) this.onWalkLeftPressed()
      if (e.keyCode === 39) this.onWalkRightPressed()
    },

    keyup (e) {
      if (e.keyCode === 37) this.onWalkLeftReleased()
      if (e.keyCode === 39) this.onWalkRightReleased()
    }
当我按下并保持我的手指在键盘上而不松开它时,逻辑上,它应该通过增加或减少“位置X”值立即开始移动到相应的方向

但一旦我按下按钮,它就会触发第一个事件,然后等待大约500毫秒,然后继续触发其他事件,直到我松开按钮

这是浏览器的某种默认行为吗?您是否知道如何覆盖它,以便它在第一个事件和其他事件之间不延迟地持续触发事件

下面是它的外观:


延迟是默认行为

因此,在玩游戏时,您需要使用
keydown
keydup
事件来实现自己的按键状态。然后每隔
x
毫秒检查一次,并更新位置

vue.js中,代码如下()


这里有一些有用的链接供您查看:


非常好的方法,谢谢!
new Vue({
  keys: {}, // this variable should be outside of reactive data
  data: { // Your data here } 
  created () {
    window.addEventListener('keyup', this.keyup);
    window.addEventListener('keydown', this.keydown);
    
    setInterval(this.customKeysChecker, 20);
  },
  methods: {
    keydown (e) {
        this.$options.keys[e.keyCode] = true;
    },
    keyup (e) {
        this.$options.keys[e.keyCode] = false;
    },
    customKeysChecker() {
      const { keys = {} } = this.$options;
      
      if (keys[37]) this.onWalkLeftPressed();
      if (keys[39]) this.onWalkRightPressed();
    },

    onWalkLeftPressed() { //Your code here },
    onWalkRightPressed() { //Your code here }
  }
})