我想要這樣的JavaScript的東西。有沒有相當於Javascript或Jquery的睡眠功能?
for (i = 0; i < 10; i++) {
alert(i);
// now sleep 1 sec
sleep(1000);
}
有一個內置的Javascript或jQuery的這個?
謝謝!
我想要這樣的JavaScript的東西。有沒有相當於Javascript或Jquery的睡眠功能?
for (i = 0; i < 10; i++) {
alert(i);
// now sleep 1 sec
sleep(1000);
}
有一個內置的Javascript或jQuery的這個?
謝謝!
有沒有這樣的事情,直接。您將不得不告訴JavaScript在一段時間後使用setTimeout
來喚醒「某事」。
這個'東西'應該是你打算在睡眠後執行的代碼。
從一個例子,我在the internet發現:
function dothingswithsleep(part) {
if(part == 0) {
alert("before sleep");
setTimeout(function() { dothingswithsleep(1); }, 1000);
} else if(part == 1) {
alert("after sleep");
}
}
但這脆弱的設計。你最好重新考慮一下你的業務邏輯在第二步之後做些什麼:調用一個不同的函數,而不是使用這些人爲的幫助變量。
第一個問題,爲什麼你想睡在一個循環內?如果這是必需的,可能應該安裝一個事件系統。我自己已經多次嘗試使用多線程JavaScript編程的睡眠策略,並發現它不能很好地工作。在javascript中執行多線程的最好方法是使用YUI或幾乎任何其他框架提供的事件系統。讓聽衆訂閱此事件,並在發生時執行一些操作。在這些事件框架中,您可以完全控制自己的自定義事件何時觸發,所以它們沒有什麼大不了的。
以下是YUI事件框架的鏈接。
http://developer.yahoo.com/yui/examples/event/index.html
下面是它如何使用YUI
var myEvent = new YAHOO.util.CustomEvent('fooEvent');
// subscribe a function to be called (first param) inside the scope of an object
// (second param).
myEvent.subscribe(function() {alert(this.count++);},{count:0},true);
setTimeout('myEvent.fire()',1000);
做的這種方式進行編碼是更清潔和更緊湊。或者如果您不想使用事件框架,請嘗試此操作
var myObj = {
count:0,
doSomething:function(){alert(this.count++);}
loopFunc:function(){
this.doSomething();
setTimeout('myObj.loopFunc()',1000);
}
}
這提供了您所需要的,它更緊湊。
但是,如果您確實必須在您的代碼中具有睡眠功能,那麼我會建議對簡單的服務器端腳本進行同步ajax調用。然後,如果您願意,可以使用服務器上的代碼進行睡眠。以下是此處發佈的問題的鏈接,向您展示如何進行同步呼叫。
How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?
但我強烈建議你去的setTimeout的方式。更清潔,如果可以避免,您可能不想撥打任何服務器端電話。
我已經搜索/搜索了一些關於javascript sleep/wait的網頁...如果你想javascript運行,延遲,運行......沒有答案......大多數人所得到的是「RUN,RUN(無用的東西),RUN」或「RUN,RUN +延遲RUN」...... 。
所以我吃了漢堡,有思想::: 這裏是一個可行的解決方案......但你要砍你的運行代碼... :::
// ... ...................................... // example1:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setInterval
var i = 0;
function run() {
//pieces of codes to run
if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i >2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==5){document.getElementById("id1").innerHTML= "<p>all code segment finished running</p>"; clearInterval(t); } //end interval, stops run
i++; //segment of code finished running, next...
}
t=setInterval("run()",1000);
</script>
</body>
</html>
// .................................... // example2:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setTimeout
var i = 0;
function run() {
//pieces of codes to run, can use switch statement
if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(1000);}
if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(2000);}
if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(3000);}
if (i==3){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>";} //stops automatically
i++;
}
function sleep(dur) {t=setTimeout("run()",dur);} //starts flow control again after dur
run(); //starts flow
</script>
</body>
</html>
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}
標準CPU刻錄機 – 2010-10-30 19:01:41
正確;不要這樣做。 – sosiouxme 2012-02-02 16:49:18
這是怎麼回事? – aaronbauman 2014-01-24 16:16:41
好吧,如果你有安裝在Web服務器上的PHP,你可以使用$.load
或類似的呼籲,只有在它sleep(int)
一個PHP文件...
我看到這個評論:「我已經嘗試過使用setTimeout,但我不需要延續功能「,並且認爲,是的,你確實需要。你不需要的是一個循環。你需要一個遞歸函數。
本
for (i = 0; i < 10; i++) {
alert(i);
// now sleep 1 sec
sleep(1000);
}
轉化爲這
function recursive(i, max)
{
if (i > max) return;
alert(i);
i = i + 1;
setTimeout(function(){ recursive(i, max); }, 1000);
}
recursive(1, 10);
發佈之前,我會做的第一件事是http://stackoverflow.com/search?q=[JavaScript ] +睡眠,你可以看到已經有很多解決方案 – epascarello 2009-08-14 12:49:02
接下來的事情是想知道爲什麼你需要睡眠,而不是像Zoidberg所說的基於事件的解決方案。 – xtofl 2009-08-14 15:09:17