逐个淡入<li>项目

her*_*ron 2 javascript jquery

我有水平菜单.它看起来像那样

<ul>
<li>Sample 1</li>
<li>Sample 2</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

有没有办法在页面加载时逐个淡化它们?

gio*_*_13 10

function fadeIn(i, elements, duration, callback){
    if(i >= elements.length)
        $.isFunction(callback) && callback();
    else
        elements.eq(i).fadeIn(duration, function(){
           fadeIn(i+1, elements, duration, callback);
        });        
}

fadeIn(0, $('ul li'), 100, function(){console.log("animation finished!");});
Run Code Online (Sandbox Code Playgroud)

工作演示:

http://jsfiddle.net/gion_13/7KQbB/

当然,你可以为更像jquery的synthax插入代码:

$.fn.fadeInEach = function(duration,callback){
    function fadeIn(i,elements,duration,callback){
        if(i >= elements.length)
            typeof callback == 'function' && callback();
        else
            elements.eq(i).fadeIn(duration, function(){
               fadeIn(i+1, elements, duration, callback);
            });        
    }
    fadeIn(0, this, duration, callback);
    return this;
} 
Run Code Online (Sandbox Code Playgroud)

现在,您可以将此插件完全用作本机fadeIn方法:

$('li').fadeInEach(100,function(){alert('animation has finished');});
// if you want to animate all of the elements in the same time use fadeIn : 
// $('li').fadeIn(100,function(){alert('animation has finished');});
Run Code Online (Sandbox Code Playgroud)

这种方法的好处在于它适用于任何元素(不仅仅是li).
这是这个小插件的演示:

http://jsfiddle.net/gion_13/7KQbB/1/