也許我錯了,但我想連鎖3個函數,第二個函數在第一個函數完成時開始,第三個函數在第二個函數完成時開始。按照docs我應該能夠做到這一點是這樣的:如何一個接一個地執行功能?
$.when(first()).then(second()).then(third());
他們似乎都在同一時間執行。是什麼賦予了?
我也試過:
這將在第一個div褪色,但沒有第二和第三;
也許我錯了,但我想連鎖3個函數,第二個函數在第一個函數完成時開始,第三個函數在第二個函數完成時開始。按照docs我應該能夠做到這一點是這樣的:如何一個接一個地執行功能?
$.when(first()).then(second()).then(third());
他們似乎都在同一時間執行。是什麼賦予了?
我也試過:
這將在第一個div褪色,但沒有第二和第三;
你迫使這些函數立即執行。 (順便說一下,它們並不是同時執行,而是一個接一個地執行,因爲JavaScript是單線程的。)
您需要編寫$.when(first).then(second).then(third)
(其中第一個是承諾),並讓庫執行它們。不是自己執行它們(這是parens所做的)。
編輯:哦,沒有看到小提琴。是的,SeanJohnson說的。
只需first(); second(); third();
將工作得很好。 JavaScript是單線程的。
採用when
和then
是東西整合Promise
,如Ajax請求(至少,這是我的理解爲非jQuery的用戶)
編輯:這是你的jsFiddle重拍使用CSS只,順便說一下^ _^
如果你想動畫完成後JS Fiddle做每一個功能,
用途:
var first = function(callBack1, callBack2){
$("#div1").fadeIn(2000, function(){callBack1(callBack2)});
}
var second = function(callBack){
$("#div2").fadeIn(2000, callBack);
}
var third = function(){
$("#div3").fadeIn(2000);
}
first(second, third);
他使用jQuery Deferreds來避免所有這些回調的需要。 – loganfsmyth 2013-03-25 01:46:54
你的意思是,當函數完成,或在動畫完成,因爲這些是兩個完全不同的事情。 – loganfsmyth 2013-03-25 01:17:24
http://jsfiddle.net/9XECY/4/ – 2013-03-25 01:18:09
對不起,我的意思是動畫完成時。 – 2013-03-25 01:37:51