Javascript спит, пока не нажата клавиша
Я провел некоторое исследование и нашел занятые решения ожидания. Я не хочу, чтобы процессор выполнял цикл в сценарии, пока я не получу событие нажатия клавиши через JQuery.
Как я могу получить что-то вроде sleepUntilKeyPress(), которая в C похожа на sleep(), но вместо ожидания определенного времени она ожидает нажатия клавиши?
2 ответа
Ты думаешь задом наперед. Ваша функция не должна ждать нажатия клавиш, функция должна делать что-то при каждом нажатии клавиши. Поддерживайте свое состояние данных в области, которой может достичь ваш обратный вызов клавиш, и обновляйте свое состояние при нажатии клавиш.
Вы пытаетесь сказать:
while(!keypress){
dontDoSomething();
}
Вы должны делать что-то более похожее на:
on(keypress, doSomething);
Рассмотрим эту идею:
var counter, ispressed, el;
// Bad
counter = 0;
ispressed = false;
el = document.getElementById("element");
el.addEventListener("mousedown", function () {
ispressed = true;
});
el.addEventListener("mouseup", function () {
ispressed = false;
});
while (1) {
if (ispressed) {
counter += 1;
}
}
// Better
el.addEventListener("click", function () {
counter += 1;
});
Давайте забудем о том, что это while
заблокирует программу (я даже не думаю, что слушатели событий сработают, и я почти уверен, что DOM заблокируется), вы просите свою программу тратить время на постоянную проверку, чтобы увидеть, нажали ли вы кнопка еще. Вместо того, чтобы делать это, пусть браузер проверит вас с помощью встроенного addEventListener()
и делать то, что вы обычно делаете, когда узнаете, что кнопка была нажата.
var interval = window.setInterval(function () {
// hang around and do nothing
}, 1000);
document.onkeypress = function () {
if (/* some specific character was pressed */) {
window.clearInterval(interval);
// do some other thing, other thing
}
};