使用 JavaScript 检测按键持续时间
Detecting duration of key-press using JavaScript
我是 JavaScript 的新手,抱歉,如果这是一个愚蠢的问题,我无法在网上找到好的答案。
我目前正在使用:
document.body.addEventListener("keydown", function(e) { keys[e.keyCode] = true; });
document.body.addEventListener("keyup", function(e) { keys[e.keyCode] = false; });
检测用户输入,这对我的目的来说效果很好,但我想不出一个好方法来计算一个键被按下了多长时间。
我试过放置一个 while 循环,如果 keys[index]
returns false 并在循环中递增一个计数器,但它似乎会破坏脚本。我猜我可以编写一个专门检测我想要的密钥是否已被释放的函数,但我不确定如何正确地进行处理。
另外,我只需要检查一把钥匙。
不设置布尔值,而是在 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;
});
不要在 keydown
中输入 true
,而是输入 new Date()
。
不要在 keyup
中输入 false
,而是计算 new Date() - keys[e.keyCode]
并将其存储在某个地方。
我是 JavaScript 的新手,抱歉,如果这是一个愚蠢的问题,我无法在网上找到好的答案。
我目前正在使用:
document.body.addEventListener("keydown", function(e) { keys[e.keyCode] = true; });
document.body.addEventListener("keyup", function(e) { keys[e.keyCode] = false; });
检测用户输入,这对我的目的来说效果很好,但我想不出一个好方法来计算一个键被按下了多长时间。
我试过放置一个 while 循环,如果 keys[index]
returns false 并在循环中递增一个计数器,但它似乎会破坏脚本。我猜我可以编写一个专门检测我想要的密钥是否已被释放的函数,但我不确定如何正确地进行处理。
另外,我只需要检查一把钥匙。
不设置布尔值,而是在 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;
});
不要在 keydown
中输入 true
,而是输入 new Date()
。
不要在 keyup
中输入 false
,而是计算 new Date() - keys[e.keyCode]
并将其存储在某个地方。