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
    }
};
Другие вопросы по тегам