2012-06-28 65 views
0
$.Deferred(function(dfr) { 
    $("#container > div").each(function() { 
     var $div = $(this); 
     dfr = dfr.pipe(function() { 
      return $div.fadeIn(); 
     }); 
    }); 
}).resolve(); 

有一種方法,以在上述代碼中分別加載DFR和然後將其傳遞到$ .Deferred()類似....

$("#container > div").each(function() { 
      var $div = $(this); 
      dfr = dfr.pipe(function() { 
       return $div.fadeIn(); 
      }); 
     }); 

$.Deferred(function(dfr) { }).resolve(); 

http://jsfiddle.net/realwork007/KgY33/25/與這個例子相似,但唯一的事情是我會單獨填充dfr。

編輯:我寫的可視化選擇排序算法,我有3〜4個輔助函數樣變backgroundOfBlock(),眨眼(指數)和swap(從,到)

所以我選擇排序可視化將是像:

function selectionSort(items){ 

    var len = items.length, min; 

    for (i=0; i < len; i++){ 

    blink(blocks[i]);// to show It is selected 

     //set minimum to this position 
     min = i; 
     changebackground(blocks[i]);//show it is min 
     //check the rest of the array to see if anything is smaller 
     for (j=i+1; j < len; j++){ 
      if (items[j] < items[min]){ 
       min = j; 
       swap(blocks[min], blocks[j]);//swap animation function 
      } 
     } 

     . 
     . 
     . 
     . 

如果我在一次一起運行該方法的所有動畫運行,但我需要他們使用任何技術sequencially運行...

...

+1

你到底在想什麼? – Bergi

回答

0

只是一個猜測:

var dfr; 
$("#container > div").each(function() { 
    var $div = $(this); 
    dfr = dfr 
     ? dfr.pipe(function() { 
      return $div.fadeIn().promise(); 
     }) 
     : $div.fadeIn().promise(); 
}); 

dfr.done(alert.bind(window, "All divs faded In")); 

你似乎並不需要新建Deferred,如果你只是想解決這個問題的時候了。只需使用您獲得的第一個promise即可。如果你不希望出現這種情況,你也可以這樣做:

var first = new $.Deferred, 
    curDfr = first; 
function blink($el) { 
    curDfr = curDfr.pipe(function() { 
     return $el.animate("background-color", "red").animate("background-color", "transparent").promise(); 
    }); 
} 

// now you can use blink() in your algorithm 
// and the animation will be executed when all piped deferreds before 
// have been resolved 

first.resolve(); // you can move this where you want 
curDfr.done(/* when everything happened */); 

所以,你會下來一個全局變量拿着延遲,並且在任何時候你要添加動畫與新的替換管道承諾。這不僅適用於我們都證明的fadeIn,還適用於changeBackground,blinkswap

你也可能have a look.queue(),這可能比延期更適合動畫。

+0

請看編輯我添加了一個我剛剛被擊中的例子。謝謝 –

+0

好,爲什麼你不使用你已有的工作代碼?或者是關於移植同步循環等? – Bergi

+0

當前代碼的問題是所有的動畫一次發生。說線程調用blink()。它不會等到blink()完成其動畫,而是繼續執行下一個語句。所以最後我看到的是,所有塊都改變顏色並一起閃爍。它應該是一個接一個,所以我嘗試推遲和解決。 –