2013-12-03 4 views
0

Как я могу запустить событие в конце этой последовательности jQuery из затухания?Fire event after fading animation complete

$(function() { 
    $('div#fds img').each(function (i) { 
     $(this).delay((i++) * 1000).fadeTo(1500, 1); 
    }) 
}); 

Это замирает в IMG-х в #fds делений от 0 до 1 в течение 1,5 секунд каждый - то, что мне нужно после того, как последний был утрачен и непрозрачностью 1, чтобы изменить переменную END от 0 до 1 .

Любые идеи о том, как это сделать? Объектно ориентированный код никогда не был моей сильной стороной ...

Спасибо, ребята!

ответ

1

Анимации теперь возвращает обещание, которое поставляется в удобной при ожидании нескольких анимаций:

$(function(){ 
    var end = 0; 
    $.when(
     $('div#fds img').each(function(i){ 
      return $(this).delay((i++)*1000).fadeTo(1500,1); 
     }) 
    ).then(function() { 
     end = 1; 
    }) 
}); 

FIDDLE

+0

Работает! Спасибо – dubbs

+0

@ dubbs - Да, да, и вы желанны! – adeneo

1

Синтаксис fadeTo в JQuery в соответствии с документацией на http://api.jquery.com/fadeTo/

.fadeTo(duration, opacity [, complete ]) 

комплектные является дополнительной функцией обратного вызова, который срабатывает после того, как операция fadeTo завершена.

В коде это будет:

$(function() { 
    $('div#fds img').each(function (i) { 
     $(this).delay((i++) * 1000).fadeTo(1500, 1, function() { 
      // executed when done fading 
     }); 
    }) 
}); 
+0

hmm .... это вызывает событие после каждый img исчез - не после того, как JUST последний ... возможно ли манипулировать этим, чтобы работать, когда JUST the LAST img исчез в поле зрения? – dubbs

+0

Да, чем вам нужно подсчитать, сколько изображений есть и сколько видимых с помощью видимого селектора http://api.jquery.com/visible-selector/ Если эти числа равны, вы расширили последний. –

0
$(this).delay((i++) * 1000) 
    .fadeTo(1500, 1, function(){ 
      $(".fire_event_class_or_id").trigger('click'); // can fire the trigger that is declared. 
    }); 
0

Этот должно сработать. Он объединяет обратный вызов в методе fadeTo с простой проверкой, чтобы увидеть, находится ли мы в конце функции. Я изменил i ++ на i + 1, чтобы он не мешал логике в обратном вызове (и запутывался, когда вы возвращаетесь к нему):

$(function(){ 

    var len = $('div#fds img').length; 

    $('div#fds img').each(function(i){ 
     $(this).delay((i+1)*1000).fadeTo(1500,1,function(){ 
      if(i == len - 1){ 
       END = 1; 
      } 
     }); 
    }); 

});