2015-08-27 29 views
0

我試圖製作一個人造加載屏幕,並且在加載大約20-50ms左右的消息之間需要延遲,以便人們在切割到初始化屏幕之前可以實際看到發生了什麼。激活此按鈕進入下面的函數:setTimeout上的語法不正確

function gameinit() { 
    for (k = 0; k <=1; k += 0.125) { 
     setTimeout(function() { 
      var nexttxt = "Loading... " + toString(100 * k) + "%" 
     }, 20); 
     displayupdate(nexttxt); 
    } 
} 

然而這來了作爲一個不正確的語法(上的jsfiddle - https://jsfiddle.net/YoshiBoy13/xLn7wbg6/2/)當我使用JShint - 特別是線四,五。我已經看過這個指南,並且所有的東西似乎都是。我究竟做錯了什麼?

(注:displayupdate(nexttxt)更新<p>標籤文本的下一行)

當執行腳本,沒有任何反應 - 在HTML文本的十六行拉昇爲正常,前八名被gameinit()函數生成的八個替換,但gameinit()只生成空白。如果腳本再次執行,它只輸出八行112.5%(就好像它是for循環的第9次迭代一樣)。

我幾乎可以肯定,這是我錯過的基本知識,有人能告訴我我做錯了什麼嗎?

+0

第一行似乎錯過尾隨分號。第二條線有什麼問題我也不知道。當然,代碼根本不起作用,但這不是JSHint檢測到的。 – Bergi

回答

0

這裏是另一個功能可以做得更好---- setInterval

var txt = ''; 
    var time = 0; 
    var id = setInterval(function(){ 
     console.log("loading..."+time/8*100+"%"); 
     if(time++>7) 
     clearInterval(id); 
    },1000); 
+0

是的!非常感謝!它終於奏效了。我調整了一下,因爲它證明我需要16個加載標籤,而不是8個,並用自定義displayupdate(x) – YoshiBoy13

+0

替換console.log(x)! setTimeout是在同步函數之後延遲迴調的函數。這裏是另一種方式:如果你想使用setTimeout這個 –

+0

var txt =''; VAR startnext =函數(M){ \t如果(M <16) \t的setTimeout(函數(){ \t \t的console.log(米); \t \t startnext(M + 1); \t},200 ); } startnext(0); –

1

使用setInterval()相反,你可以使用clearInterval()

function gameinit() { 
 
    displayupdate("Loading... 0%"); 
 
    var k = 0; 
 
    var inter = setInterval(function() { 
 
    if (k < 1) { 
 
     k += .25; 
 
     displayupdate("Loading... " + 100 * k + "%") 
 
    } else { 
 
     clearInterval(inter); 
 
    } 
 
    }, 2000); 
 
} 
 

 
function displayupdate(d) { 
 
    console.log(d); 
 
} 
 

 
gameinit();

+0

確保突出顯示並解釋更改。 – user2864740

+0

仍然有同樣的結果 - 沒有。這一次它不會產生112.5%的。 – YoshiBoy13

0

setTimeout,你希望它在裏面工作循環不起作用清除間隔。您必須爲傳遞到setTimeout的每個循環變量創建閉包,或創建一個新函數來執行setTimeout操作。

function gameinit() { 
    for (var k = 0; k <= 1; k += 0.125) { 
     doSetTimeOut(k); 
    } 
} 

function doSetTimeOut(k) { 
    setTimeout(function() { 
     var nexttxt = "Loading... " + toString(100 * k) + "%" 
    }, 20); 
    displayupdate(nexttxt); 
} 
+0

也不起作用...再次,它空出它應該替換爲「正在加載...」的線 – YoshiBoy13