molily: JQuery - setTimeout in For-Schleife

Beitrag lesen

$('#start').click(function() {
  $('.sabbl').each(function(index) {
    $(this).delay(500 * (index+1)).queue(function() {
      // whatever
    });
  });
});

Ich würde das mit einer Kette von setTimeouts lösen:

$('#start').click(animate);  
function animate () {  
   var $elems = $('.sabbl'),  
       i = 0,  
       l = $elems.length;  
   step();  
   function step () {  
      $elem = $elems.eq(i);  
      // Whatever  
      i++;  
      if (i < l) {  
         setTimeout(step, 500);  
      }  
   }  
}

(ungetestet)

Der Vorteil davon ist, dass der Payload den nächsten Schritt verzögert. Wenn ich mich richtig erinnere sorgt das für gleichförmigere Animationen. Animations-Frameworks wie Émile so. Somit ist auch ausgeschlossen, dass sich mehrere Step-Funktionen im Event-Loop aufstauen, wenn der step einmal länger als der Intervall braucht.

Wenn man unbedingt jQuerys Animation Queue verwenden will, kann man natürlich $elems.delay(500).queue(step) statt setTimeout schreiben.

Mathias