簡體   English   中英

jQuery 多個 animate() 回調

[英]jQuery multiple animate() callback

我正在嘗試同時為一組元素設置動畫(幾乎每個動畫之間都有一點延遲):

$('.block').each(function(i){
   $(this).stop().delay(60 * i).animate({
     'opacity': 1
   }, {
      duration: 250,
      complete: mycallbackfunction // <- this fires the callback on each animation :(
   });
});

在所有動畫完成后,如何運行回調 function?

在計數器變量周圍使用閉包。

var $blocks = $('.block');
var count = $blocks.length;
$blocks.each(function(i){
   $(this).stop().delay(60 * i).animate({
     'opacity': 1
   }, {
      duration: 250,
      complete: function() {
        if (--count == 0) {
          // All animations are done here!
          mycallbackfunction();
        }
      }
   });
});

請注意將項目列表保存到 $block 變量中以保存查找。

由於 jQuery 1.5,您可以使用$.when [docs] ,這更容易編寫和理解:

var $blocks = $('.block');

$blocks.each(function(i){
   $(this).stop().delay(60 * i).animate({
     'opacity': 1
   }, {
      duration: 250
   });
});

$.when($blocks).then(mycallbackfunction);

演示

當沒有 animation 要做時, Felix Kling 的回答將觸發回調。 即使animation 通過$el.stop()停止並且因此未完成到最后,這也會觸發回調。

我找到了Elf Sternberg 使用我在這個 jsfiddle 中實現的延遲對象的方法

http://jsfiddle.net/8v6nZ/

   var block = $('.block');
   block.each(function(i){
   $(this).stop().delay(60 * i).animate({
     'opacity': 1
    }, {
      duration: 250,
      complete: i== (block.length-1) ? myCallbackFunction : function(){}
    });
   });
$('.block').each(function(i){
   $(this).stop().delay(60 * i).animate({
     'opacity': 1
   }, {
      duration: 250,
      complete: ((i == $('.block').length - 1) ? mycallbackfunction : null)
   });
});

暫無
暫無

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

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