2

だから私は次のコードを書きました:

$('.frame').each(function(){
    $(this).click(function(e){
        var id = $(this).attr('id');
        e.preventDefault();
        $('.active').removeClass('active').fadeOut(800).queue(function(){
            $('#box'+id).addClass('active').fadeIn(800);
        });
    });
});

そのため、フレーム クラスを持つボタンがクリックされるたびに、対応するボックスが取得され、フェードインされます...少なくとも理論的には。すべてのボックスで初めて機能するので、すべてのボックスを 1 回クリックすると、すべてが正しくフェードインします。しかし、フェードインしたいときはいつでも、以前にフェードインしました (以前に他のすべてをクリックしたとしても)、再びフェードインすることはありません。アクティブなクラスを追加し、他のクラスを正しくフェードアウトし、アクティブなクラスを削除しますが、フェードインしません。

これはまだ十分に奇妙ではないかのように、上記のエラーが発生すると、コードはすぐに機能しなくなります。つまり、オブジェクトをもう一度フェードインしようとしても失敗するとすぐに、別のオブジェクトを再びフェードインできなくなり、アクティブなクラスを追加することさえできなくなります (ただし、古いクラスは削除されます)。 !)

あなたが助けてくれることを願っています。

4

2 に答える 2

0

これを試して:

$('.frame').each(function(){
    $(this).click(function(e){
        var id = $(this).attr('id');
        e.preventDefault();
        $('.active').removeClass('active').fadeOut(800, function(){
            $('#box'+id).addClass('active').fadeIn(800);
        });
    });
});

つまり、 ;.queue()の後には使用しないでください。.fadeOut()代わりに、無名関数を の完全なコールバックとして配置します.fadeOut().queue()ドコによると:

で関数を追加するときは、が最終的に呼び出されて、行の次の関数が実行されるように.queue()する必要があることに注意してください。.dequeue()

使用できますが、そう.queue()する場合は、コールバック内から呼び出す必要があり.dequeue()ます。.fadeOut()がコールバックを受け取るときに、そのようなことを複雑にする必要はありません。

于 2013-05-22T09:18:40.310 に答える
0
$('.frame').click(function(e) {
    var id = $(this).attr('id');
    e.preventDefault();
    $('.active').removeClass('active').fadeOut(800, function() {
        $('#box' + id).addClass('active').fadeIn(800);
    });
});

これが機能しない場合は、HTML またはフィドルを提供してください。

于 2013-05-22T09:39:50.117 に答える