2014-03-19 22 views
0

I'm使用功能,將動畫一些事情,例如:如何從函數返回,如果多個動畫完成

function doMyStuff(){ 
$('#test1').animate({...}, {queue:false}); 
$('#test2').animate({...}, {queue:false}); 
return true; 
} 
// this should only go on if doMyStuff() is complete 
doMyStuff(); 
alert("We can go on, doMyStuff() is finished"); 

我只想去,如果此功能被完成了他動畫。我怎樣才能做到這一點?目前它並沒有等待動畫的結束。

回答

4

利用promises

function doMyStuff(){ 
    return $.when(
    $('#test1').animate({...}, {queue:false}).promise(), 
    $('#test2').animate({...}, {queue:false}).promise() 
    ); 
} 

doMyStuff().then(function() { 
    alert("We can go on, doMyStuff() is finished"); 
}); 

所有你想要執行完成動畫必須從傳遞給.then回調後調用的代碼。

.promise documentation(重點煤礦):

.promise()方法返回一個動態生成Promise是解決一旦某種類型綁定到集合中的所有動作,排隊與否,已經結束。

缺省情況下,類型爲"fx",這意味着當所選元素的所有動畫完成返回Promise得到解決。

$.when只是簡單地創建一個新的承諾,當所有的承諾傳遞給它的時候解決。

+0

現在我想知道爲什麼這個工作不使用'.promise()'?我的意思是:'return $ .when( $('#test1')。animate({...},{queue:false}), $('#test2')。animate({...} {queue:false}) );' –

+0

AFAIK,'$ .when'調用'.promise()'如果一個jQuery對象作爲參數傳遞。但我喜歡明確:) –

+0

噢,只是檢查jQuery源代碼,好像是這樣,thx! –