2016-12-06 7 views
0

私のウェブサイトは、1ページの異なるセクションのdivでいっぱいです。私はホームページに1つのナビを持っていて、スクロールした後、別の固定されたナビがフェードインします。ナビゲーションバーが重複しているのはなぜですか?

ときどきときどきnavの複製があります。したがって、固定されたナビゲーションは通常のナビゲーション内にあります。通常のnavが再び現れる前に固定されたnavが消えていたはずであるため、これは奇妙です。

これについての洞察はありますか? Google Chromeを使用してコードを表示しています。それはクロムの問題だろうか?

$(document).on('scroll', function() {  

    if($(this).scrollTop() > $('.nav').outerHeight()){ 
     $('.nav').hide(); 
     $('.nav_fixed').fadeIn("slow"); 
    } 

    else if($(this).scrollTop() == $('.nav').position().top) { 
     $('.nav_fixed').hide(); 
     $('.nav').fadeIn(700); 
    } 

    else { 

    } 
}); 
+0

あなたのマークアップ/ HTMLを表示することができますか? –

+1

'.stop()'](https://api.jquery.com/stop/)を '.fadeIn'の前に追加してアニメーションを何度も起動させないようにすることができます – empiric

答えて

3

「通常のNAVが再び現れ前に固定NAVは消えているはずですので、これは奇妙です。」

これは、アニメーションが非同期であるという事実に関連している可能性があります。 hide()命令の後にfadeIn()命令があるからといって、fadeIn()が完了した後にはhide()が終了することを意味しません。実際には、fadeIn()は、アニメーションの非同期性のためにhide()になる可能性があります。 hereを説明するようにhide()のための完了コールバック関数にfadeIn()を追加

試してみてください。

$(document).on('scroll', function() {  

    if($(this).scrollTop() > $('.nav').outerHeight()){ 

    // By encapsulating the instruction for fadeIn() inside of a 
    // function that is then passed as a completion callback to 
    // the hide() method, we ensure that fadeIn() doesn't happen 
    // until hide() is finished 
    $('.nav').hide(function(){ 
     $('.nav_fixed').fadeIn("slow"); 
    }); 
    } else if($(this).scrollTop() == $('.nav').position().top) { 

    // By encapsulating the instruction for fadeIn() inside of a 
    // function that is then passed as a completion callback to 
    // the hide() method, we ensure that fadeIn() doesn't happen 
    // until hide() is finished 
    $('.nav_fixed').hide(function(){ 
     $('.nav').fadeIn(700); 
    });  
    } else { 

    } 
}); 
+0

私はこれを試しましたが何らかの理由でそれはスライド効果を追加しました。左にスライドさせすぎないようにして、どうしてこんなにも! –

+0

フェードする前に隠れていることが許可されているので、隠れたナビに続くコンテンツはそのスペースを埋めるように移動します。これは、設定されたサイズを持つdiv内に両方のnavを置くことで対処できます。 –

関連する問題