2017-10-01 15 views
1

こんにちは、私は、navbarがページの真ん中にあり、ユーザーがスクロールして、navbarに当たって、それがトップに固執する必要があるという効果を得ようとしています。ページ。この例:here ユーザーがスクロールしてスティックしたナビバーに当たったときと、スローな効果があるときがわかります。スクロール時にNavbarがヘッダーにスティックする

私は仕事に就きましたが、それは非常にスムーズだった例1とは違って、まっすぐ離れていることを意味して、それはcluncky感じ、私は非常に厳しい間スムーズにトップに固執します。

.parallax { 
 
    background-color: Black; 
 
    min-height: 700px; 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    background-size: cover; 
 
} 
 

 
.parallax1 { 
 
    background-color: Red; 
 
    min-height: 700px; 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    background-size: cover; 
 
} 
 

 
.navbar { 
 
    margin-bottom: 0px; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    list-style: none; 
 
    height: 70px; 
 
    z-index: 1 
 
} 
 

 
.navbar-nav { 
 
    float: none; 
 
    margin: 0; 
 
    text-align: center 
 
} 
 

 
.navbar-nav>li { 
 
    float: none; 
 
    display: inline-block 
 
} 
 

 
.navbar-nav>li>a { 
 
    line-height: 38px 
 
} 
 

 
.navbar-nav>li>a.active { 
 
    background-color: #E7E7E7 
 
} 
 

 
.navbar-default .navbar-nav>li>a:hover, 
 
.navbar-default .navbar-nav>li>a:focus { 
 
    color: #333333; 
 
    background-color: #E7E7E7 
 
} 
 

 
.navbar-toggle { 
 
    background-color: #000000; 
 
    background-image: none; 
 
    border-radius: 4px; 
 
    float: right; 
 
    margin-bottom: 8px; 
 
    margin-right: 15px; 
 
    margin-top: 18px; 
 
    padding: 9px 10px; 
 
    position: relative 
 
} 
 

 
.navbar-inverse .navbar-toggle .icon-bar { 
 
    background-color: #2DCC70 
 
} 
 

 
.navbar-default .navbar-toggle:hover, 
 
.navbar-default .navbar-toggle:focus { 
 
    background-color: #000000 
 
} 
 

 
.navbar-inverse .navbar-collapse, 
 
.navbar-inverse .navbar-form { 
 
    border-color: transparent 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<div class="parallax"></div> 
 

 
<nav class="navbar navbar-default" data-spy="affix" data-offset-top="700"> 
 
    <div class="container"> 
 
    <div class="navbar-header"> 
 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
 
      <span class="sr-only">Toggle navigation</span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
     </button> 
 
    </div> 
 
    <div id="navbar" class="navbar-collapse collapse"> 
 
     <ul class="nav navbar-nav"> 
 
     <li class="active"><a href="#hometab">Home</a></li> 
 
     <li><a href="#section1">About Me</a></li> 
 
     <li><a href="#section2">My Skills</a></li> 
 
     <li><a href="#section3">Portfolio</a></li> 
 
     <li><a href="#section4">Contact Me</a></li> 
 
     </ul> 
 
    </div> 
 
    <!--/.nav-collapse --> 
 
    </div> 
 
</nav>1> 
 

 
<div class="parallax1"></div>

すべてのヘルプは素晴らしいことです。

+0

私は私の答えチェックの答えに該当する場合、問題のコメントそれを更新しました。 –

答えて

1

からナビゲーションギャップに接辞値を設定し、このコードに従ってくださいあなただけに追加する必要がありますあなたのスタイル:

.affix + .parallax1 { 
    margin-top: 70px; 
} 

クラス.affixは、ナビゲーションが上部に固執していることを示します。したがって、.affixnavにある場合は、マージンまたはパディングをparallax1に設定して、HELLO THEREのテキストがナビゲーションの後ろに隠れないようにする必要があります。

あなたのフィドルの編集:それはsmoothScrollライブラリを使用しているため必要な例はそうスムーズに動作

.parallax { 
 
    background-color: Black; 
 
    min-height: 700px; 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    background-size: cover; 
 
} 
 

 
.parallax1 { 
 
    background-color: Red; 
 
    min-height: 700px; 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    background-size: cover; 
 
} 
 

 
/* Add this */ 
 
.affix + .parallax1 { 
 
    margin-top: 70px; 
 
} 
 

 
.navbar { 
 
    margin-bottom: 0px; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    list-style: none; 
 
    height: 70px; 
 
    z-index: 1 
 
} 
 

 
.navbar-nav { 
 
    float: none; 
 
    margin: 0; 
 
    text-align: center 
 
} 
 

 
.navbar-nav>li { 
 
    float: none; 
 
    display: inline-block 
 
} 
 

 
.navbar-nav>li>a { 
 
    line-height: 38px 
 
} 
 

 
.navbar-nav>li>a.active { 
 
    background-color: #E7E7E7 
 
} 
 

 
.navbar-default .navbar-nav>li>a:hover, 
 
.navbar-default .navbar-nav>li>a:focus { 
 
    color: #333333; 
 
    background-color: #E7E7E7 
 
} 
 

 
.navbar-toggle { 
 
    background-color: #000000; 
 
    background-image: none; 
 
    border-radius: 4px; 
 
    float: right; 
 
    margin-bottom: 8px; 
 
    margin-right: 15px; 
 
    margin-top: 18px; 
 
    padding: 9px 10px; 
 
    position: relative 
 
} 
 

 
.navbar-inverse .navbar-toggle .icon-bar { 
 
    background-color: #2DCC70 
 
} 
 

 
.navbar-default .navbar-toggle:hover, 
 
.navbar-default .navbar-toggle:focus { 
 
    background-color: #000000 
 
} 
 

 
.navbar-inverse .navbar-collapse, 
 
.navbar-inverse .navbar-form { 
 
    border-color: transparent 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> 
 
<div class="parallax"> 
 

 
</div> 
 

 

 

 
<nav class="navbar navbar-default" data-spy="affix" data-offset-top="700"> 
 
    <div class="container"> 
 
    <div class="navbar-header"> 
 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
 
     <span class="sr-only">Toggle navigation</span> 
 
     <span class="icon-bar"></span> 
 
     <span class="icon-bar"></span> 
 
     <span class="icon-bar"></span> 
 
     </button> 
 
    </div> 
 
    <div id="navbar" class="navbar-collapse collapse"> 
 
     <ul class="nav navbar-nav"> 
 
     <li class="active"><a href="#hometab">Home</a></li> 
 
     <li><a href="#section1">About Me</a></li> 
 
     <li><a href="#section2">My Skills</a></li> 
 
     <li><a href="#section3">Portfolio</a></li> 
 
     <li><a href="#section4">Contact Me</a></li> 
 
     </ul> 
 
    </div> 
 
    <!--/.nav-collapse --> 
 
    </div> 
 
</nav> 
 

 
<div class="parallax1"> 
 
    <h1> 
 
HELLO THERE 
 
</h1> 
 

 
</div>

+1

非常に単純で魅力的な、感謝のxのように働いた – RonTheOld

+0

例はシンプルに見えますが、私はjqueryを使った理由をよく知っています。私の例ではジャンプが非常にスムーズではありません。 –

0

使用ブートストラップクラス「ナビゲーションバーに固定されたトップ」

<nav class="navbar navbar-default navbar-fixed-top" data-spy="affix" data-offset-top="700"> 
+0

申し訳ありませんが、私は質問を理解していないと思います、私は与えた例と同じ外観になるので、ユーザーがスクロールし、navbarをヒットすると、それは上にフリックする – RonTheOld

0

トップ

<!DOCTYPE html> 
    <html> 
    <head> 
     <title>Bootstrap Example</title> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
     <style> 
     .affix { 
      top: 0; 
      width: 100%; 
     } 

     .affix + .container-fluid { 
      padding-top: 70px; 
     } 
     </style> 
    </head> 
    <body> 

    <div class="container-fluid" style="background-color:#000;color:#fff;height:200px;"> 
     Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC 

    "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?" 
    </div> 

    <nav class="navbar navbar-inverse" data-spy="affix" data-offset-top="197"> 
     <ul class="nav navbar-nav"> 
     <li class="active"><a href="#">Basic Topnav</a></li> 
     <li><a href="#">Page 1</a></li> 
     <li><a href="#">Page 2</a></li> 
     <li><a href="#">Page 3</a></li> 
     </ul> 
    </nav> 

    <div class="container-fluid" style="height:1000px"> 
     <p> 
     "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum 
     </p> 
     <p> 
     "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum 
     </p> 
    </div> 

    </body> 
    </html> 
1

理由があります。私はあなたが提供したサンプルのフィドルにそれを単に含めました。あなたが示したデモサイトのようにもっと機能します。hereをチェックしてください。あなたは、ページの読み込みが終了したら、ライブラリがすでに初期化されているので、あなたの部分に任意のコードを追加する必要はありません。

addEvent(wheelEvent, wheel); 
addEvent('mousedown', mousedown); 
addEvent('load', init); 

は、あなたが他の質問がある場合は、私に教えてください:)

1

スムーズスティッキーナビゲーションバーこれはjquery 2を使用しています。すべての画面サイズでナビゲーションバーを追跡します。

var navOffset, scrollPos = 0; 
 

 
function sticky() { 
 
    if (!$(".navbar").hasClass("fixed")) { 
 
    navOffset = $(".navbar").offset().top; 
 
    } 
 
} 
 

 
sticky(); 
 

 
$(window).scroll(function() { 
 
    scrollPos = $(window).scrollTop(); 
 
    if (scrollPos >= navOffset) { 
 
    var ht = $(".navbar").outerHeight() + 10; 
 
    $(".navbar").addClass("navbar-fixed-top"); 
 
    $(".nav-placeholder").css({ 
 
     'height': ht + "px", 
 
     'display': 'block' 
 
    }); 
 
    } else { 
 
    $(".navbar").removeClass("navbar-fixed-top"); 
 
    $(".nav-placeholder").css({ 
 
     'height': 0, 
 
     'display': 'none' 
 
    }); 
 
    } 
 
});
.parallax { 
 
    background-color: Black; 
 
    min-height: 700px; 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    background-size: cover; 
 
} 
 

 
.parallax1 { 
 
    background-color: Red; 
 
    min-height: 700px; 
 
    background-attachment: fixed; 
 
    background-position: center; 
 
    background-repeat: no-repeat; 
 
    background-size: cover; 
 
} 
 

 
.navbar { 
 
    margin-bottom: 0px; 
 
    left: 0; 
 
    top: 0; 
 
    width: 100%; 
 
    list-style: none; 
 
    height: 70px; 
 
    z-index: 1 
 
} 
 

 
.navbar-nav { 
 
    float: none; 
 
    margin: 0; 
 
    text-align: center 
 
} 
 

 
.navbar-nav>li { 
 
    float: none; 
 
    display: inline-block 
 
} 
 

 
.navbar-nav>li>a { 
 
    line-height: 38px 
 
} 
 

 
.navbar-nav>li>a.active { 
 
    background-color: #E7E7E7 
 
} 
 

 
.navbar-default .navbar-nav>li>a:hover, 
 
.navbar-default .navbar-nav>li>a:focus { 
 
    color: #333333; 
 
    background-color: #E7E7E7 
 
} 
 

 
.navbar-toggle { 
 
    background-color: #000000; 
 
    background-image: none; 
 
    border-radius: 4px; 
 
    float: right; 
 
    margin-bottom: 8px; 
 
    margin-right: 15px; 
 
    margin-top: 18px; 
 
    padding: 9px 10px; 
 
    position: relative 
 
} 
 

 
.navbar-inverse .navbar-toggle .icon-bar { 
 
    background-color: #2DCC70 
 
} 
 

 
.navbar-default .navbar-toggle:hover, 
 
.navbar-default .navbar-toggle:focus { 
 
    background-color: #000000 
 
} 
 

 
.navbar-inverse .navbar-collapse, 
 
.navbar-inverse .navbar-form { 
 
    border-color: transparent 
 
} 
 

 
.nav-placeholder { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<div class="parallax"></div> 
 
<nav class="navbar navbar-default"> 
 
    <div class="container"> 
 
    <div class="navbar-header"> 
 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
 
      <span class="sr-only">Toggle navigation</span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
     </button> 
 
    </div> 
 
    <div id="navbar" class="navbar-collapse collapse"> 
 
     <ul class="nav navbar-nav"> 
 
     <li class="active"><a href="#hometab">Home</a></li> 
 
     <li><a href="#section1">About Me</a></li> 
 
     <li><a href="#section2">My Skills</a></li> 
 
     <li><a href="#section3">Portfolio</a></li> 
 
     <li><a href="#section4">Contact Me</a></li> 
 
     </ul> 
 
    </div> 
 
    <!--/.nav-collapse --> 
 
    </div> 
 
</nav> 
 
<div class="nav-placeholder"></div> 
 
<p>Some text for test</p> 
 
<div class="parallax1"></div>

+0

OP:代わりに私の答えを考えてください。この回答はjQueryの複雑さをプロジェクト+別のサードパーティのライブラリに追加して、Bootstrapが既にあなたのためにしていることを達成しています(既存の粘着性で)。 @RonTheOldは、あなたの元の例が動作するために必要なのは、あなたのサイトに小さな滑らかなスクロールlib(いずれもうまくいく)を追加することだけです。 – Kano

+0

Jqueryはブートストラップの依存関係ですので、余分なファイルを追加しませんでした。FYI –

+1

私の悪い@RajendranNadarは、忘れました。 – Kano

関連する問題