2010-08-20 13 views
0

Lorsque UL.chapters est 'slideDown', avoir le premier Les 'chapitres LI' animent la propriété 'left' à 20px, puis reviennent à 0px, puis font que le second LI fasse la même chose, puis le troisième, et ainsi de suite. avec mon code, ils sont tous animés directement après UL.chapters glisse vers le bas, comment puis-je faire faire leur animation 1 à la fois, la seconde ne démarre pas jusqu'à ce que le premier a terminé, etc.Jquery: comment: quand UL est affiché, avoir le premier LI animé 'gauche' 20px, puis à 0px, puis faire le deuxième LI faire cela, puis troisième, etc

$('h1').click(function() { 
    $('UL.chapters').slideDown(500); 
    $('.chapters LI').each(function() { 
     $(this).animate({'left':'20px'}); 
     $(this).animate({'left':'0px'}); 
    }); 
}); 

code mis à jour .

Répondre

3

Essayez ceci:

$(function() { 
    $('h1').click(function() { 
     $('.chapters').slideDown(500, function() { 
      doSlide($('.chapters li:first')); 
     }); 
    }); 

}); 


function doSlide(current) { 
    $(current).animate({ 
     'left': '20px' 
    }, function() { 
     $(current).animate({ 
      'left': '0px' 
     }, function() { 
      doSlide($(current).next('li')); 
     }); 
    }); 
} 

Cela appelle la fonction d'animation de diapositives sur la première <li> puis dans le rappel pour l'animation qu'il glisse à la position de départ, il appelle la fonction sur la prochaine <li>.

Voici une démo de celui-ci dans l'action: http://jsfiddle.net/CBNgR/

+0

génial! Savez-vous comment démarrer le deuxième LI lorsque le premier est à moitié fait avec l'animation? Donc, quand le premier LI commence à animer de 20px à 0px, lancez le second LI juste quand il commence à animer? –

+0

@ android.nick - Pour cela, essayez de mettre le doSlide ($ current) .next ('li')); appelez immédiatement après l'appel pour revenir à la position de départ, au lieu de dans le rappel pour cet appel animé. Jetez un coup d'œil à: http://jsfiddle.net/CBNgR/1/ – Ender

0

Avez-vous remarqué que la 4ème ligne de votre code est $ ('chapitres LI') au lieu de $ ('. Chapitres LI')?

Aussi vous vous répétez ici. Essayez ceci:

$('h1').click(function() { 
    $('UL.chapters').slideDown(500); 
    $('.chapters LI').each(function() { 
     $(this).animate({'left':'20px'}); 
     $(this).animate({'left':'0px'}); 
    }); 
}); 

Assurez-vous également que vos LIs sont en position absolument, ou bien votre Animer gauche auront des problèmes.

+0

J'aime votre code plus, il est plus agréable, mais ils le font tous en même temps, mais je suis en train de faire le premier Animer LI, puis quand il est fait animer, faire animer le second LI, puis quand le deuxième LI est animé, faire animer le troisième LI, et ainsi de suite dans la liste des LI jusqu'au dernier. –