Определение продолжительности нажатия клавиши с использованием JavaScript - PullRequest
1 голос
/ 19 марта 2020

Я очень плохо знаком с JavaScript, извините, если это глупый вопрос, я не смог найти хорошего ответа в Интернете.

Я сейчас использую:

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

для обнаружения пользовательского ввода, который вполне подходит для моих целей, но я не могу придумать, как определить, как долго нажата клавиша.

Я пытался поместить while-l oop, которое завершается, если keys[index] возвращает false и увеличивает счетчик в l oop, но это, похоже, нарушает сценарий. Полагаю, я мог бы написать функцию, которая бы определенно определяла, была ли отпущена нужная мне клавиша, но я не уверен, как правильно go об этом.

Кроме того, мне нужно только проверить это за один ключ.

Ответы [ 2 ]

7 голосов
/ 19 марта 2020

Вместо установки логических значений установите временную метку при нажатии клавиши, затем получите ее и сравните с текущей временной меткой при нажатии клавиши:

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;
});
1 голос
/ 19 марта 2020

Вместо ввода true в keydown, введите new Date(). Вместо ввода false в keyup, вычислите new Date() - keys[e.keyCode] и сохраните его где-нибудь.

...