2009-07-17 69 views
9

的平滑變化,下面我有像一個魅力的工作代碼:的jQuery的innerHTML

var div = $('#div'); 
div.html('<div>one line</div><div>another line</div>'); 
div.slideDown('slow'); 

但是,當我需要改變的內容(行數),問題就來了:

div.html('<div>one line replacement</div><div>another line replacement</div><div>third line</div>') 

這種轉變太快了。如何爲此設置動畫?

+0

問題「太快了」,或者您確實想要一行一行地向下滑動? – 2009-07-17 17:45:41

+0

問題是它太快 – 2009-07-17 17:58:28

回答

6

您可以在看不見的跨度添加到HTML:

<span class="foo" style="display: none">some other lines</span> 

然後在淡出他們:

$("span.foo").fadeIn('slow'); 


通過編輯,您可能還想考慮:

div.slideUp('slow'); // you may want this to be 'fast' 
div.html('some other lines'); 
div.slideDown('slow'); 
+0

非常棘手,但它應該工作 – 2009-07-17 17:36:09

+0

蒂姆斯科特的答案是正確的。 – gdbj 2016-12-08 21:53:08

0

如果你想讓它需要一定的時間,則:

div.slideDown(numberOfMilliseconds); 
+0

不完全是我想要的 – 2009-07-17 20:31:13

1

也許如果你把多餘的線條與顯示一個div:沒有風格,那麼您可以在該專區褪色,像這樣(的概念 - 代碼未測試):

div.html("<div id='next_line' style='display:none'>some other lines</div>"); 
$("#next_line").fadeIn('slow'); 
0

托馬斯提到「slideDown(numberOfMilliseconds)」。我試過了,jquery的doc定義了以毫秒爲單位的速度是執行amimation所花費的時間。

在這種情況下,1行或10行將花費相同的時間進行滑動。如果你知道線的數量,也許你可以添加一個乘數,例如了slideDown(lineCount * speedInMS)

2

丹尼爾·Sloof的回答皺紋:

div.fadeOut('fast', function() { 
    div.html(html); 
    div.fadeIn('fast'); 
} 

這將保證你的第一個動畫是繼續之前完成。至少在我目前的情況下,衰落比滑動更好。