2011-02-08 7 views

Répondre

2

Peut-être quelque chose comme ceci:

var delay = 500, t = 0; 
$("li").css('display', 'none').each(function(){ 
    t += delay; 
    var $li = $(this); 
    setTimeout(function(){ 
    $li.fadeIn(); 
    },t); 
}); 
+0

hmm celui-ci semble juste cacher la liste – sat

+1

Désolé, il suffit de le réparer (et testé dans votre page). Utiliser $ (this) dans un setTimeout n'était pas le meilleur ... – Nabab

+0

P.s Merci Nabab !!!! – sat

0

boucle à travers le li, et utiliser setTimeout pour la file d'attente pour l'animation que li.

$('li').each(function() { 
    var li = this; 
    animateLi = function() { 
     li.fadeIn(800); 
    } 
    setTimeout(animateLi, timeout); 
    timeout += 100; 
}); 
+0

J'ai ça mais j'aimerais pour le faire d'une manière plus intelligente indépendamment de la quantité d'éléments – sat

+0

$ ('li'). css ('display', 'aucun'). first(). fadeIn (1900) .next(). delay (500). fadeIn (1900) .next(). delay (700) .fadeIn (1900) .next(). délai (900) .fadeIn (1900); – sat

3

Ce probablement pas la meilleure solution, mais il devrait fonctionner:

$('li').each(function(i){ 
    var el = this; 
    setTimeout(function(){ 
    $(el).fadeIn(800); 
    },800*i) 
}); 

Juste pour le plaisir, une version récursive:

function animateLi(i){ 
    $('li').eq(i).fadeIn(800); 
    if ($('li').eq(i+1).length>0) 
    { 
     setTimeout(function(){animateLi(i+1)},800); 
    } 
} 
animateLi(0); 
+0

Ce n'est peut-être pas le meilleur, mais c'est succinct et clair. +1 –

+2

Bien que, je viens de remarquer que 'this' se référera à' window' dans le 'setTimeout'. Vous devez le stocker dans une variable en dehors du délai d'expiration. –

+0

Bon, bravo. – Ivan

0

Une légère variation sur Ivans metho d

$(function() { 
    $('ul li:hidden').each(function(idx) { 
     setTimeout(function(el) { 
      el.fadeIn(); 
     }, idx* 1000, $(this)); 
    }); 
}); 

Et une fonction récursive en utilisant la fonction de rappel fadeIn au lieu de setTimeout

function DisplayOneByOne(){ 
    $('ul li:hidden:first').fadeIn('2000', DisplayOneByOne); 
} 
0

Voici comment vous le faites:

var delay = 200, t = 0; 
$("li").css('display', 'none').each(function(){ 
    t += delay; 
    var $li = $(this); 
    setTimeout(function(){ 
     $li.fadeIn(1900); 
    },t); 
}); 
0

Il y a une autre façon de disparaître dans les éléments après chaque autre:

$.fn.fadeInNext = function(delay) { 
    return $(this).fadeIn(delay,function() { 
     $(this).next().fadeInNext(); 
    }); 
}; 

$('li').hide().first().fadeInNext(1000); 
Questions connexes