2016-02-18 48 views
-1

我做了一些調查,發現忙碌的等待解決方案。我不希望處理器在腳本中執行循環,直到通過JQuery獲得按鍵事件。Javascript sleep直到按下按鍵

我該如何拉類似sleepUntilKeyPress(),這是一個函數像睡眠()在C中,而不是等待一些特定的時間,它等待按鍵?

+5

你爲什麼想睡覺?爲什麼不等待按鍵事件被激活,然後從那裏開始? –

+0

@MikeC我不希望處理器繼續運行,直到按下該鍵。我想讓它睡覺,或從事其他工作。換句話說:睡眠直到按下鍵,然後我會從那裏開始。 –

+3

你在想什麼。而不是**不執行直到按下一個鍵,**執行**當按下一個鍵時執行。 – 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

邁克C評論更相關! – CodeIsLife

+0

'setInterval'不會阻止像'sleep'這樣的執行。它只是在運行一組代碼之前等待一段時間才能通過。其他代碼可以在此等待期間運行。 –