2011-05-03 71 views
2

我完全難住了。jscript/jquery:在div1中逐漸淡出1,並在中間暫停

我有一堆消息,每個在一個div「msg_feed_frame_ $ i」中增加,因此消息1在div「msg_feed_frame_1」中,msg 2在「msg_feed_frame_2」等等中。我想淡化這些消息在一個接一個地使用jquery,但由於某種原因,無論我用settimeout和setinterval做什麼,代碼立即使它們全部同時淡出。

這是我到目前爲止有:

function feed(i) 
{ 
    var div = "#msg_feed_frame_"; 
    var fader = div.concat(i); 
    $(fader).fadeIn(2000); 

} 

function timefade() 
{ 
var num = 1; 
for (num=1; num<=10; num++) 
{ 
var t=setTimeout(feed(num),1000); 
} 
} 

$(document).ready(function(){ 
     timefade(); 
    }); 
+0

大家好,歡迎StackOverflow的,請正確格式化你的代碼(這樣做是爲了你這一次)。要了解如何操作,請點擊提問問題文本區域中的橙色問號。 – Trufa 2011-05-03 01:51:25

+0

謝謝@trufa! – empirejuice 2011-05-03 01:52:51

+0

你更歡迎! – Trufa 2011-05-03 01:55:51

回答

1

你的問題是,for環路快速執行組對於每個函數調用,超時1000毫秒。這裏是你能解決這個問題的一種方法:

function feed(i) { 
    var div = "#msg_feed_frame_"; 
    var fader = div.concat(i); 
    $(fader).fadeIn(2000); 

} 

function timefade() { 
    var num = 1; 
    var fadeIt = function(i) { 
     return function() { feed(i); }; 
    }; 
    for (num = 1; num <= 4; num++) { 
     var t = setTimeout(fadeIt(num), num * 1000); 
    } 
} 

$(document).ready(function() { 
    timefade(); 
}); 

此外,您的原代碼經過setTimeout結果feed(i)函數調用(undefined)的,並預計function類型的對象。我添加了一個輔助函數,該函數返回一個函數的引用,該函數將使用正確的參數調用feed

在函數內捕獲num的值稱爲閉包,起初可能會引起混淆。請檢查this post out以獲取關於循環內閉合的一些很好的解釋,並在必要時進行。

這裏是你的榜樣,工作:http://jsfiddle.net/andrewwhitaker/tpGXt/

+0

偉大的代碼,謝謝。有沒有什麼方法可以使循環反向,以便輸出msg4,msg3,msg2,msg1? – empirejuice 2011-05-03 02:27:29

+0

Bar,Foo,World,你好?肯定的事情:http://jsfiddle.net/andrewwhitaker/tpGXt/1/ – 2011-05-03 02:30:14

0

嘗試使用jQuery的.delay()函數...

function feed(i){ 
    var div = "#msg_feed_frame_"; 
    var fader = div.concat(i); 
    $(fader).fadeIn(2000).delay(1000); 
} 
function timefade(){ 
var num = 1; 
for (num=1; num<=10; num++){ 
    feed(num); 
} 
} 
$(document).ready(function(){ 
     timefade(); 
}); 
+0

不起作用 - 同時淡入所有的DIV。 – empirejuice 2011-05-03 02:00:35