jQuery淡入和淡出循环回到:第一个兄弟

时间:2013-02-21 03:49:09

标签: jquery fadein fadeout

JS Fiddle位于:http://jsfiddle.net/8nqkA/2/

HTML

<div>
<div class="show">Test 1</div>
<div class="hidden">Test 2</div>
<div class="hidden">Test 3</div>
<div class="hidden">Test 4</div>
</div>

的jQuery

$(document).ready(function() {
    myFunc($(".show"));
});

function myFunc(oEle)
{
       oEle.fadeOut('slow', function(){
            if (oEle.next())
            {
                oEle.next().fadeIn('slow', function(){
                   myFunc(oEle.next());
                });
            }
           else
               oEle.siblings(":first").fadeIn('slow', function(){
               myFunc(oEle.siblings(":first"));
               });
        });
}

CSS

.hidden {
    display: none;
}

尝试让它在完成后循环回测试1,但不起作用。只是想让它重新开始,这有什么不对吗?

2 个答案:

答案 0 :(得分:1)

在您的代码中 -

$(document).ready(function() {
    myFunc($(".show"));
});

    function myFunc(oEle)
    {
           oEle.fadeOut('slow', function(){
                if (oEle.next().length)
                {
                    oEle.next().fadeIn('slow', function(){
                       myFunc(oEle.next());
                    });
                }
               else
                   oEle.siblings(":first").fadeIn('slow', function(){
                   myFunc(oEle.siblings(":first"));
                   });
            });
    }

点击此处查看演示 - http://jsfiddle.net/8nqkA/3/

答案 1 :(得分:1)

if (oEle.next()){ // This needs to be oEle.next().length
    oEle.next().fadeIn('slow', function(){
        myFunc(oEle.next());
    });
}else{ // You should wrap this in a block
    oEle.siblings(":first").fadeIn('slow', function(){
        myFunc(oEle.siblings(":first"));
    });
}

我们测试.length的原因是因为.next()和大多数jQuery方法一样,返回jQuery - 无法直接测试。你可以把它想象成一个数组,所以.length属性为我们提供了当前选择中有多少元素。

我们还应将您的else代码封装在一个块({..})中,因为以下代码跨越多行。