1

ここでこのコードを取得しました: http://jsfiddle.net/Az5Uk/

function fadeIt (element) {

    var elem = $(element).hide();
    var elemLen = $(element).length;

    elem.each(function (i){
        $(this).delay(i * 900).fadeIn(900);

        if (i == elemLen -1) {

            $($(this).get().reverse()).each(function(i) {
                 $(this).delay(elemLen * 900).fadeOut(900);
            });
        }
    });

}

fadeIt(".animate");​

やりたいこと: 3 つの X を次々にフェード インし、次に逆方向にフェード アウトします。これはすべて再帰関数の一部である必要があります。

フェードアウトが 1 つの X の後で停止する理由がわからないため、この例では再帰的な部分を記述していません。つまり、それが原因であることはわかっていif (i == elemLen -1)ますが、条件を編集する方法がわかりません。 3 つの X をすべてフェードアウトさせます。

私はすでに試しif (i == elemLen -1 || i == elemLen -2)ましたが、その構文では最初に中央の X がフェードアウトし、次に最後の X がフェードアウトします。したがって、これは機能しません。

誰かが私を正しい方向に押してくれませんか?

4

1 に答える 1

1

http://jsfiddle.net/npwvH/

私は他人のコードを解釈するのが得意ではないので、別の方法を書きました。

function ponyo(elements, anim) {
    elements.each(function(i) {
        $(this).delay(i*900)[anim](900);
    });
    setTimeout(function() {
        ponyo($(elements.get().reverse()), (anim=='fadeIn')?'fadeOut':'fadeIn');
    }, elements.length * 900);
}
ponyo($(".animate").hide(), 'fadeIn');​

単純に、あなたが行ったようにアニメーションを実行し、アニメーションが完了するのに必要な時間 (setTimeout) を待ってから、逆のコレクションで反対のアニメーションを呼び出します。

于 2012-07-06T14:29:46.073 に答える