2011-02-08 2 views

ответ

2

Может быть что-то вроде этого:

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

hmm этот, кажется, просто спрятал список – sat

+1

Извините, просто исправил его (и протестировал на вашей странице). Использование $ (this) внутри setTimeout было не лучшим ... – Nabab

+0

P.s Спасибо Nabab !!!! – sat

0

Петля через ли, и использовать SetTimeout очереди анимации для этого ли.

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

У меня есть это, но я бы хотел чтобы сделать это умнее, независимо от количества элементов – sat

+0

$ ('li'). css ('display', 'none'). first(). fadeIn (1900) .next(). delay (500). . FadeIn (1900) .next() задержки (700) .fadeIn (1900) .next() задержки (900) .fadeIn (1900). – sat

3

Это, вероятно, не самое лучшее решение, но оно должно работать:

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

Просто для удовольствия, рекурсивная версия:

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

Это может быть не самое лучшее, но это красно и ясно. +1 –

+2

Хотя, я только заметил, что 'this' будет ссылаться на' window' внутри 'setTimeout'. Вам нужно сохранить его в переменной вне таймаута. –

+0

Хорошо, привет. – Ivan

0

Небольшое отклонение по методу Ivans d

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

И рекурсивная функция, используя FadeIn функцию обратного вызова вместо SetTimeout

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

Вот как это сделать:

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

Существует еще один способ, чтобы исчезнуть в элементах после каждого другое:

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

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