3

この手法が間違っているかどうかはわかりませんが、実際には、新しいコンテンツが完全に読み込まれたときにのみフェードインする必要があります。beforeSendとcompletesendはタイミングに影響を与えないようです。スライドアップが発生する前でも、新しいコンテンツはフェードインします。

私はあなたが知っておくべきajaxにまだ精通していません。

これが私のコードです:

$(function(){
    var replacePage = function(url) {

        $.ajax({
            url: url,
            type: 'get',
            dataType: 'html',
            beforeSend: function() {    
                $(".menue").slideUp();
            },
            success: function(data){
                var dom = $(data);
                var html = dom.filter('#content').html();

                $('#content').html(html);

            },
            complete: function(){
                $("#content").fadeIn(); 
            }
        });
    }

    $('nav a').live('click', function(e){
        history.pushState(null, null, this.href);   
        replacePage(this.href);
        e.preventDefault();
    $("#content").hide();
    });

    $(window).bind('popstate', function(){
        replacePage(location.pathname);
    });
});
4

2 に答える 2

3

次のことを試してください。

success: function(data){
           var dom = $(data);
           var html = dom.filter('#content').html();
           $(".menue").promise().done(function(){
                $('#content').html(html).fadeIn()
           })
        },

slideUp()または、アニメーションの完了後に実行される のコールバック関数を使用できます。

$(".menue").slideUp('slow', function(){
    $.ajax({
        url: url,
        type: 'get',
        dataType: 'html',
        success: function(data){
            var dom = $(data);
            var html = dom.filter('#content').html();
            $('#content').html(html).fadeIn()
        }
    });
 })

は非推奨であり、代わりにメソッドlive()を使用できることに注意してください。on()

于 2012-07-22T03:24:14.093 に答える
1

ajax呼び出しの成功関数を次のように変更します。

success: function(data){
                var dom = $(data);
                var html = dom.filter('#content').html();
                $('#content').html(html).hide().fadeIn();
            },

完全な呼び出しからfadeIn()を削除することを忘れないでください。

于 2012-07-22T03:19:13.547 に答える