Stagger jQuery анимации


Я хочу анимировать ряд элементов в jquery 1.3, причем каждый следующий элемент начинается с середины первой анимации. Другими словами, Я хочу эффект половины очереди. Я попытался использовать приведенный ниже код, но он не работает. У кого-нибудь есть идеи?

    $("h3").click(function(){
      $(".projectItem").each(function (i) {
        if (i > 0){
            setTimeout ("", 500);
        }
        $(this).animate({"opacity": 0, "duration": 1000});
      });
    });

PS: Я пытался использовать различные плагины jQuery" idle "или" pause", но подозреваю, что используемые методы были до jquery 1.3?

PPS: заранее спасибо за вашу помощь:)

2 6

2 ответа:

Вы можете попробовать что-то вроде этого:

$("h3").click(function(){
  $(".projectItem").each(function (i) {
    // store the item around for use in the 'timeout' function
    var $item = $(this); 
    // execute this function sometime later:
    setTimeout(function() { 
      $item.animate({"opacity": 0}, 1000);
    }, 500*i);
    // each element should animate half a second after the last one.
  });
});

Общая идея здесь заключается в использовании вашего списка .projectItem - вы задерживаете анимацию от начала до 500 мс на элемент. Первый элемент (i=0) будет иметь задержку 0 мс и выполняться (почти) немедленно во время следующего цикла событий. Каждый другой элемент будет задерживаться на 500 мс перед ним, и так как ваша анимация длится 1000 мс, она начнется примерно на полпути к последней анимации элементов.

Я думаю, что проще разбить анимацию на 2 части (от непрозрачности 1 до 0,5 и от 0,5 до 0) и использовать обычную очередь (если разрыв возможен).

Этот код, если мы начнем с непрозрачности 1:

$("h3").click(function(){
  $(".projectItem").each(function (i) {
    $(this).animate({"opacity": 0.5, "duration": 500}, function(){
      //... put here something in the half way ...
      $(this).animate({"opacity": 0, "duration": 500}); 
    });
  });
});