3

以下の for ループのすべてのフェードアウトの後に関数を実行するにはどうすればよいですか?

私がする必要があるのは、目に見えるものをすべてフェードアウトしてから、特定のオブジェクトをフェードインすることです。スタイリングの要件により、私のトップナビとドロップダウンナビは異なる UL になっているため、扱いにくいのです。

私はまだ自分でスクリプトを書くのが得意ではないので、(願わくば) 基本的なものが欠けています。

私は物事を関数にラップしようとしましたが、それは変数のスコープを混乱させ、私が理解できないことを台無しにしているようです...

助けてくれてありがとう!

$('.ksddtop').on('mouseenter', function(){
    var ddtop = $(this).text();
    var dd = $('.' + ddtop);
    $('.ksddwrap').fadeIn();
    $(dd).fadeIn();

    var ksdds = $('.ksdd');
    for(var i = 0; i < ksdds.length; i++) {
        var ksdd = ksdds[i];
        if (! $(ksdd).hasClass(ddtop) ){
            $(ksdd).fadeOut();
        }
    }
}); 
4

2 に答える 2

6

要件を理解していれば、これでうまくいくはずです:

$('.ksdd:not(' + ddtop + ')').fadeOut().promise().done(function(){
    // all done fading!
});

ksddクラスを持たないすべての要素をフェードアウトし、ddtopすべてのアニメーションが終了したら何かを行います。

詳しくは:

jQuery コレクションを呼び出す.promiseと、要素のコレクションのすべてのアニメーションが完了すると解決される promise オブジェクトが得られます。これには、キューに入れられたアニメーションが含まれます。

コールバック関数を に直接渡すと、要素がすべて完了した後でなく、要素ごと.fadeOut()にコールバックが返されます。

于 2012-06-25T18:19:05.340 に答える
1

それ以外の:

var ksdds = $('.ksdd');
for(var i = 0; i < ksdds.length; i++) {
    var ksdd = ksdds[i];
    if (! $(ksdd).hasClass(ddtop) ){
        $(ksdd).fadeOut();
    }
}

試す:

$('.ksdd').each(function(){
    if (! $(this).hasClass(ddtop) ){
        $(this).fadeOut();
    }
});
于 2012-06-25T18:16:23.320 に答える