Вы думаете о прошлом. Ваша функция не должна ждать нажатия клавиши, чтобы что-то сделать, функция должна что-то делать всякий раз, когда нажата клавиша. Поддерживайте состояние данных в области, к которой может обратиться ваш обратный вызов, и обновите свое состояние при нажатии клавиши.
Вы пытаетесь сказать:
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
закроет программу, (я даже не думаю, что прослушиватели событий будут срабатывать r и я уверен, что DOM закроется), вы просите свою программу тратить время на постоянную проверку, чтобы увидеть, нажата ли кнопка еще. Вместо этого позвольте браузеру проверить вас со встроенным addEventListener()
и делать то, что вы обычно делаете, когда узнаете, что кнопка нажата.
Почему вы хотите спать? Почему бы просто не ждать активации события нажатия клавиши, а затем оттуда? –
@MikeC Я не хочу, чтобы процессор продолжал работать до тех пор, пока эта клавиша не будет нажата. Я хочу, чтобы он спал или работал на других работах. Другими словами: спящий режим до тех пор, пока не будет нажата клавиша, тогда я пойду оттуда. –
Ты думаешь в обратном направлении. Вместо ** ** не выполняйте, пока не будет нажата клавиша, ** do ** выполняются при нажатии клавиши. – zero298