user input - Detecting duration of key-press using JavaScript - Stack Overflow

I'm very new to JavaScript, sorry if this is a dumb question, I haven't been able to find a g

I'm very new to JavaScript, sorry if this is a dumb question, I haven't been able to find a good answer online.

I'm currently using:

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

to detect user input, which works quite well for my purpose, but I can't think of a good way to figure out how long a key has been pressed down.

I've tried putting a while-loop that exits if keys[index] returns false and increments a counter in the loop, but that just seems to break the script. I'm guessing I could write a function that specifically detects if the key I want has been released, but I'm not sure how to go about that properly.

Additionally, I only need to check it for one key.

I'm very new to JavaScript, sorry if this is a dumb question, I haven't been able to find a good answer online.

I'm currently using:

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

to detect user input, which works quite well for my purpose, but I can't think of a good way to figure out how long a key has been pressed down.

I've tried putting a while-loop that exits if keys[index] returns false and increments a counter in the loop, but that just seems to break the script. I'm guessing I could write a function that specifically detects if the key I want has been released, but I'm not sure how to go about that properly.

Additionally, I only need to check it for one key.

Share Improve this question asked Mar 19, 2020 at 3:31 nullclinenullcline 3522 silver badges16 bronze badges 2
  • 1 Do you need to know how long it has been pressed before you release the key? – Alfredo Awesome Monazite Commented Mar 19, 2020 at 3:35
  • check Date.now() at keydown and at keyup – jsotola Commented Mar 19, 2020 at 3:38
Add a ment  | 

2 Answers 2

Reset to default 9

Instead of setting boolean values, set a timestamp on keydown, then retrieve it and pare against the current timestamp on 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;
});

Instead of putting in true in keydown, put new Date(). Instead of putting in false in keyup, calculate new Date() - keys[e.keyCode] and store it somewhere.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745567981a4633509.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信