Основной возможной проблемой производительности является то, что на некоторых платформах crypto.randomBytes
может блокироваться, если закончится энтропия. Поэтому вы не хотите тратить какую-либо случайность, если вы его используете.
Поэтому вместо сравнения строк я бы использовал следующую целую операцию.
if (random_bytes < 16700000) {
return random_bytes = random_bytes - 100000 * Math.floor(random_bytes/100000);
}
около 99,54% шанса получить ответ от первых 3 байтов, в отличие от около 76% шансов на ваш подход.
Во-первых, нам нужно прикрепить прослушиватель событий к области, где мы хотим захватить ввод с клавиатуры (используйте окно, если вы хотите захватить все).
Затем в обработчике событий мы можем делать все, что захотим, в зависимости от нажатой клавиши. ЗДЕСЬ вы найдете диаграмму со всеми ключевыми значениями:
let captureArea = document.getElementById('captureArea');
captureArea.addEventListener('keypress', inputHandler);
function inputHandler(e) {
// PRINT PRESSED KEY VALUE
console.log(e.which);
// HANDLING EXAMPLE
if (e.which <= 31 || (e.which >= 48 && e.which <= 57)) {
// A NUMBER HAS BEEN PRESSED
// SWITCH TO CORRESPONDING SLIDE
} else if (e.which === 13) {
// ENTER KEY HAS BEEN PRESSED
// TRIGGER SUBMIT BUTTON HANDLER
}
}
Очевидно, это простой пример. В зависимости от предполагаемой кросс-браузерной поддержки, вы можете использовать e.which, addEventListener / removeEventListener и разрешить устаревшие альтернативы.
Не забудьте отключить прослушиватель событий, когда в этом нет необходимости:
captureArea.removeEventListener('keypress', inputHandler);
А более конкретная информация с captureArea также может помочь повысить производительность.
ПРИМЕЧАНИЕ. Я думаю, что описание вопроса неясно и может быть истолковано как противоположное: «Как отправлять события ввода с клавиатуры при нажатии кнопки», вместо: «Как вызвать нажатие кнопки на основе ввода с клавиатуры». Но не было бы смысла получать намерения пользователя через событие и переводить его в другой тип события, чтобы последовательно перехватывать его. Поэтому я предпочитаю второе толкование.