首页 > 解决方案 > javascript中的平滑键盘输入

问题描述

我已经开始用 Javascript 编程,用 WebGL 制作一个 3D 应用程序。我需要以其他方式接收键盘输入,因为我这样做的方式是这样的:

var keys = {};
window.addEventListener("keydown", (e) =>  {
    keys[e.which] = true;

    updateKeys();
});

window.addEventListener("keyup", (e) =>  {
    delete keys[e.which];

    updateKeys();
});



function updateKeys() {
    for(var i in keys) {
        if(keys[87] === true) {
            //Move
        }
    }
}

产生非常粗糙的结果并且有口吃。有什么方法可以让我获得流畅的输入吗?

标签: javascript

解决方案


这是口吃,因为你的动作与关键事件一起运行。并且您的键事件利用event.repeat,当您按住键时会发生这种情况。

你应该做两件事:

  1. 在您的keydown侦听器中,添加以下行以忽略重复按下:
if (e.repeat) return;
  1. 将您的移动逻辑移动到其他地方,即window.requestAnimationFrame()处理程序。

推荐阅读