Javascript JS Keydown在第一个事件之后触发事件之前有一些奇怪的1秒延迟
我试图在Vue.js中创建场景中的角色移动 我为左右按钮添加了一个键绑定: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.
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 }
}
})