我做了一些調查,發現忙碌的等待解決方案。我不希望處理器在腳本中執行循環,直到通過JQuery獲得按鍵事件。Javascript sleep直到按下按鍵
我該如何拉類似sleepUntilKeyPress(),這是一個函數像睡眠()在C中,而不是等待一些特定的時間,它等待按鍵?
我做了一些調查,發現忙碌的等待解決方案。我不希望處理器在腳本中執行循環,直到通過JQuery獲得按鍵事件。Javascript sleep直到按下按鍵
我該如何拉類似sleepUntilKeyPress(),這是一個函數像睡眠()在C中,而不是等待一些特定的時間,它等待按鍵?
你在思考倒退。你的函數不應該等待按鍵來做某件事,只要按下一個按鍵,函數就應該做一些事情。在關鍵回調可以達到的範圍內維護數據狀態,並在按鍵上更新狀態。
你想說:
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()
,並做你通常會做的,當你發現按鈕已被按下。
這回答我的問題。謝謝! 我想我首先在JavaScript算法上工作過,忘記了異步事件。我只需要重寫一個算法。 –
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
}
};
邁克C評論更相關! – CodeIsLife
'setInterval'不會阻止像'sleep'這樣的執行。它只是在運行一組代碼之前等待一段時間才能通過。其他代碼可以在此等待期間運行。 –
你爲什麼想睡覺?爲什麼不等待按鍵事件被激活,然後從那裏開始? –
@MikeC我不希望處理器繼續運行,直到按下該鍵。我想讓它睡覺,或從事其他工作。換句話說:睡眠直到按下鍵,然後我會從那裏開始。 –
你在想什麼。而不是**不執行直到按下一個鍵,**執行**當按下一個鍵時執行。 – zero298