2011-08-29 55 views
2

我怎樣才能延遲each()被觸發?jquery:我怎麼能延遲每個()被觸發

這是延遲每個盒子在特定時間淡出的代碼。

$(document).ready(function(){ 

    var delay = 0; 
    $('.block-item:lt(16)').each(function(){ 

     //^^ do for every instance less than the 16th (starting at 0) 
     $(this).delay(delay).animate({ 
      opacity:0 
     },500); 
     delay += 500; 

    }); 


}); 

但我想觸發each()之前的延遲時間約五秒鐘。這可行嗎?

這裏是link

回答

0

在父母所有的利是會掉色一個如果它僅僅是一個的事延遲最初的動畫,爲什麼不從5000延遲開始?

http://jsfiddle.net/QAWTy/1/

$(document).ready(function(){ 

    var delay = 5000; 
    $('.block-item:lt(16)').each(function(){ 

     //^^ do for every instance less than the 16th (starting at 0) 
     $(this).delay(delay).animate({ 
      opacity:0 
     },500); 
     delay += 500; 

    }); 


}); 
+0

明白了!這是完美的答案!謝謝。 – laukok

0

這是我爲此專門做的一個片段。 可以調用iniFadeChildren($(「父」),‘禮’,500) 又經過

function iniFadeChildren(pParent, pChildrenType, pDelay, pSpeed){ 
    pParent.find(pChildrenType).css({display:'none'}); 
    if(!pChildrenType){pChildrenType='*'} if(!pDelay){pDelay=200} if(!pSpeed){pSpeed=300} 
    fadeChildren(pParent, pChildrenType, pDelay, 0, pParent.children(pChildrenType).length, pSpeed); 
} 

function fadeChildren(pParent, pChildrenType, pDelay, pNbr, pTotal, pSpeed){ 
    pParent.find(pChildrenType).eq(pNbr).fadeIn(pSpeed); 
    pNbr++; 
    if(pNbr!=pTotal){ 
     var command='fadeChildren('+pParent+', '+pChildrenType+', '+pDelay+', '+pNbr+', '+pTotal+')'; 
     t=setTimeout(function(){fadeChildren(pParent, pChildrenType, pDelay, pNbr, pTotal, pSpeed)}, pDelay); 
    } 
} 
+0

如果任何人對如何改善這種代碼的想法,這可以理解 –

0
$('.block-item:lt(16)').delay(delay).each(function(){ 

     //^^ do for every instance less than the 16th (starting at 0) 
     $(this).animate({ 
      opacity:0 
     },500); 
     delay += 500; 

    }); 
) 
+0

這是行不通的。 'each'不是一個動畫,所以它不會排隊。因此延遲不會延遲每個。 –

0

當然可以,這樣

$(document).ready(function(){ 

    var delay = 0; 
    setTimeout(function() { 
    $('.block-item:lt(16)').each(function(){ 

     //^^ do for every instance less than the 16th (starting at 0) 
     $(this).delay(delay).animate({ 
      opacity:0 
     },500); 
     delay += 500; 

    }); 

    }, 5000); 

}); 
+0

歡迎您 –

0

你的意思只是每個初始呼叫等待5秒鐘之後?如果是使用setTimeoutsetTimeout Reference

Live Demo

$(document).ready(function(){ 

    var delay = 0; 
    // Wrap the function with setTimeout 
    setTimeout(function(){ 
     $('.block-item:lt(16)').each(function(){ 

      //^^ do for every instance less than the 16th (starting at 0) 
      $(this).delay(delay).animate({ 
       opacity:0 
      },500); 
      delay += 500; 
     }); 
    }, 5000); // 5000 = 5 seconds 


}); 
0

您可以使用setInterval的方法來實現這一目標。

$(document).ready(function(){ 
    var count = 0; 
    var $blockItems = $('.block-item:lt(16)'); 
    var timer; 
    timer = setInterval(function(){ 
       if(count == 16){ 
        clearInterval(timer); 
        return; 
       } 
       $blockItems.eq(count).animate({ 
       opacity:0 
       },500); 
       count++; 
      }, 500); 
}); 
0

利用的一些新功能http://jsfiddle.net/7czu4/

function HideItems(items, delay) { 
    $(items[0]).fadeOut() 
     .delay(delay) 
     .promise() 
     .done(function() { 
      items.splice(0, 1); 
      if (items.length > 0) 
      { 
       HideItems(items, delay);  
      }    
    });  
} 

var items = $(".item"); 

HideItems(items, 5000);