Заставьте пользователя удерживать ключ в течение минимального времени

#javascript

Вопрос:

Я пытаюсь заставить пользователя удерживать пробел не менее 0,3 секунды, прежде чем код запустит функцию. Я не хочу, чтобы это нарушало какой-либо другой код, который мог бы происходить в фоновом режиме в то время. Кто-нибудь знает, как это сделать?

Я также хочу, чтобы какой-то текст стал зеленым через 0,3 секунды, поэтому, если вы удерживали клавишу в течение 1 секунды, текст будет зеленым через 0,3 секунды после удержания.

У меня есть этот базовый код:

 document.body.onkeyup = function (e) {
    if(e.keyCode == 32) {
        // Do Something, making sure spacebar is held for at least 0.3s
    }
}
 

Ответ №1:

Вы регистрируете ввод ключа с отметкой времени и при вводе проверяете прошедшее время.

Правка: Если вы хотите запустить функцию ровно через 0,3 с, вы делаете это наоборот, при нажатии клавиши вы устанавливаете значение var, отмечая, что пробел отключен, и устанавливаете timeout значение, которое проверяет, по-прежнему ли клавиша отключена, а затем, например, делает что-то зеленым.

Комментарии:

1. Итак, на onkeydown я бы начал интервал, а затем в функции выше я бы проверил, что интервал больше 0,3 с? Но что, если бы я хотел, чтобы какой-то текст стал зеленым через 0,3 с и оставался зеленым до тех пор, пока клавиша не поднимется?

2. В обратном вызове onkeydown вы можете использовать setTimeout для вызова функции, которая проверяет, не был ли еще снят пробел, и если нет, включите любой текст, который вы хотите, зеленым.

3. Хорошо, Спасибо. В этом есть смысл