簡體   English   中英

單獨的pipe()和$ .Deferred.resolve()

[英]Separate pipe() and $.Deferred.resolve()

$.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個輔助函數,如change backgroundOfBlock(),blink(index)和swap(from,to)

因此,我的選擇排序可視化效果將類似於:

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
            }
        }

       .
       .
       .
       .

如果我運行此方法,則所有動畫同時運行,但是我需要它們順序運行...

使用任何技術...

只是一個猜測:

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 只需使用您獲得的第一個承諾即可 如果您不希望這樣做,也可以執行以下操作:

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 ,因為我們都表現出來,而且還與changeBackgroundblinkswap

您還可以查看 .queue() ,它比延遲更適合於動畫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM