2010-07-11 84 views
1

我想用jquery創建連鎖效果。通過讓一個元素一個接一個地「反彈」。我有它的工作,但不知道爲什麼它只能這樣工作。首先在這裏是代碼。jquery動畫幫助

//First Part (I Don't know why I need it?) 
$(elements).queue(function(){ 
    $(this).fadeTo("fast",1); 
    $(this).dequeue();}); 

//The Actuall Ripple Effect    
for (var i = 0; i < elements.length; i++)      
    $(elements[i]).effect("bounce",{times:1}).delay(i * 50); 
       } 

如果我要刪除第一部分,所有元素將同時彈跳。所以我的問題是爲什麼會發生這種情況並且是他們的解決方法?

我使用jQuery 1.4.2 和「元素」是一個內嵌未排序列表

//編輯我忘了指出,反彈效應來自jQuery UI的內部圖像。

回答

0

你必須.delay()上的影響錯誤的一邊。

試試看:http://jsfiddle.net/MF3A8/(頂部點擊運行按鈕來重播)

elements = $('div'); 

for (var i = 0; i < elements.length; i++) {     
    elements.eq(i).delay(50 * i).effect("bounce",{times:1}); 
}​ 

你也可以使用.eq()引用正確元素的jQuery對象。

+0

啊我現在明白了;感謝那一個。所以我從來不需要真正做到第一部分是排隊,所以延遲就會發生。再次感謝你。 – Tad 2010-07-11 01:48:10

0

嘗試:

jQueryElement.animate({bogusAttribute: false}, 400).animateMethod(); 

其中400毫秒的延遲時間。 bogusAttribute可以是CSS規範中沒有的任何東西,並且屬性值也可以是任何東西,理由是僅僅在沒有真正動畫的情況下使元素忙碌。

element.delay()suspends queued effects - 它「[套]一個定時器,以延遲在隊列後續項目執行」,所以element.firstAnimationMethod(/* arguments */).delay(400).secondAnimationMethod(/* arguments */)作品。

那將是:

$(elements).each(function(index, elementToAnimate) { 

    $(this).animate({bogus: false}, (index * 50)).effect("bounce", {times: 1}); 

}); 
+0

這完全工作太謝謝你了!我仍然需要掌握你在說什麼。爲什麼元素不得不忙?它只是爲了讓計時器進入嗎? – Tad 2010-07-11 01:21:12

+0

是的,就像使用'setTimeout'一樣,只有使用'animate'才能使所有內容保持在隊列中。 – 2010-07-11 15:28:01