使用 JavaScript 检测按键的持续时间

nul*_*ine 2 javascript user-input

我对 JavaScript 很陌生,很抱歉,如果这是一个愚蠢的问题,我无法在网上找到好的答案。

我目前正在使用:

document.body.addEventListener("keydown", function(e) { keys[e.keyCode] = true; });
document.body.addEventListener("keyup", function(e) { keys[e.keyCode] = false; });
Run Code Online (Sandbox Code Playgroud)

检测用户输入,这对我的目的来说非常有效,但我想不出一个好方法来确定一个键被按下了多长时间。

我试过放置一个while循环,如果keys[index]返回false则退出并在循环中增加一个计数器,但这似乎破坏了脚本。我猜我可以编写一个函数来专门检测我想要的密钥是否已被释放,但我不确定如何正确地进行。

此外,我只需要检查一个键。

Cer*_*nce 7

不是设置布尔值,而是在 keydown 上设置时间戳,然后检索它并与 keyup 上的当前时间戳进行比较:

const signalKeypressDuration = (key, duration) => {
  console.log(`Key ${key} pressed for ${duration} ms`);
};

const keys = {};
document.body.addEventListener("keydown", ({ key }) => {
  if (!keys[key]) keys[key] = Date.now();
});
document.body.addEventListener("keyup", ({ key }) => {
  signalKeypressDuration(key, Date.now() - keys[key]);
  keys[key] = null;
});
Run Code Online (Sandbox Code Playgroud)