2016-02-18 4 views
-1

Я провел некоторое исследование и нашел занятые решения для ожидания. Я не хочу, чтобы процессор выполнял цикл в скрипте, пока я не получу событие нажатия клавиши через JQuery.Javascript спящий режим до тех пор, пока не будет нажата клавиша

Как я могу вытащить что-то вроде sleepUntilKeyPress(), которая является функцией типа sleep() в C, но вместо ожидания какого-то определенного времени она ждет нажатия клавиши?

+5

Почему вы хотите спать? Почему бы просто не ждать активации события нажатия клавиши, а затем оттуда? –

+0

@MikeC Я не хочу, чтобы процессор продолжал работать до тех пор, пока эта клавиша не будет нажата. Я хочу, чтобы он спал или работал на других работах. Другими словами: спящий режим до тех пор, пока не будет нажата клавиша, тогда я пойду оттуда. –

+3

Ты думаешь в обратном направлении. Вместо ** ** не выполняйте, пока не будет нажата клавиша, ** do ** выполняются при нажатии клавиши. – zero298

ответ

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 закроет программу, (я даже не думаю, что прослушиватели событий будут срабатывать r и я уверен, что DOM закроется), вы просите свою программу тратить время на постоянную проверку, чтобы увидеть, нажата ли кнопка еще. Вместо этого позвольте браузеру проверить вас со встроенным addEventListener() и делать то, что вы обычно делаете, когда узнаете, что кнопка нажата.

+0

Это отвечает на мой вопрос. Благодаря! Я предполагаю, что я так много работал над алгоритмами javascript и забыл об асинхронных событиях. Я просто должен переписать один алгоритм. –

-2
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 
    } 
}; 
+0

Mike C комментарий более уместен! – CodeIsLife

+0

'setInterval' не предотвращает выполнение как' sleep'. Он просто ждет переход времени перед запуском набора кода. Другой код может работать во время этого ожидания. –

Смежные вопросы