2017-12-04 15 views
-2

私は、Navstartを更新するためにBootstrap scrollspyを使用しています。私はdata-spy属性が何を知っているとどのようにそれを使用するが、私にはない、それはscrollspyのアクティブなナビゲーションバーの色を変更します。

動的なコンテンツであるsection.butマッチングのbackground-colorと一致するようにnavbarli強調され、アクティブの色を変更したいですscrollpyプラグインが実際にbonnet.soの下でどのように動作するかを知っています。私はそれに取り組むための独自のコードを作ることができます。上記

<!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.3.1/jquery.min.js"></script> 
 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
    <style> 
 
    body { 
 
     position: relative; 
 
    } 
 
    #section1 {padding-top:50px;height:500px;color: #fff; background-color: #1E88E5;} 
 
    #section2 {padding-top:50px;height:500px;color: #fff; background-color: #673ab7;} 
 
    #section3 {padding-top:50px;height:500px;color: #fff; background-color: #ff9800;} 
 
    #section41 {padding-top:50px;height:500px;color: #fff; background-color: #00bcd4;} 
 
    #section42 {padding-top:50px;height:500px;color: #fff; background-color: #009688;} 
 
    </style> 
 
</head> 
 
<body data-spy="scroll" data-target=".navbar" data-offset="50"> 
 

 
<nav class="navbar navbar-inverse navbar-fixed-top"> 
 
    <div class="container-fluid"> 
 
    <div class="navbar-header"> 
 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar"> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span>       
 
     </button> 
 
     <a class="navbar-brand" href="#">WebSiteName</a> 
 
    </div> 
 
    <div> 
 
     <div class="collapse navbar-collapse" id="myNavbar"> 
 
     <ul class="nav navbar-nav"> 
 
      <li><a href="#section1">Section 1</a></li> 
 
      <li><a href="#section2">Section 2</a></li> 
 
      <li><a href="#section3">Section 3</a></li> 
 
      <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Section 4 <span class="caret"></span></a> 
 
      <ul class="dropdown-menu"> 
 
       <li><a href="#section41">Section 4-1</a></li> 
 
       <li><a href="#section42">Section 4-2</a></li> 
 
      </ul> 
 
      </li> 
 
     </ul> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</nav>  
 

 
<div id="section1" class="container-fluid"> 
 
    <h1>Section 1</h1> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
</div> 
 
<div id="section2" class="container-fluid"> 
 
    <h1>Section 2</h1> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
</div> 
 
<div id="section3" class="container-fluid"> 
 
    <h1>Section 3</h1> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
</div> 
 
<div id="section41" class="container-fluid"> 
 
    <h1>Section 4 Submenu 1</h1> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
</div> 
 
<div id="section42" class="container-fluid"> 
 
    <h1>Section 4 Submenu 2</h1> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
    <p>Try to scroll this section and look at the navigation bar while scrolling! Try to scroll this section and look at the navigation bar while scrolling!</p> 
 
</div> 
 

 
</body> 
 
</html>
scrollspyの一例です。 Scrollspyプラグインは、スクロール位置に基づいてナビゲーションリスト内のリンクを自動的に更新するために使用されます。アクティブなナビゲーションバーの色をそれぞれの位置の背景色に変更する必要がある This is an example of what I am starting with.

+0

私はあなたの実際の質問を明確にする編集を示唆しました。一般的にプラグインの仕組みが広すぎると尋ねると、あなたの質問が閉鎖されることになります。私の提案された編集内容を注意深く読んで、あなたが何を求めているかを依頼してください。また、W3Schoolsにリンクするのではなく、あなたがこれまでに持っているコードを投稿した場合に役立ちます。乾杯! –

+0

@AndrewMyers私はそれを達成するための方法を見つけなかったので、私はあなたが私の質問が不明であると思いますコードを持っていません私は。私は何をしようとしているのか尋ねなかった –

+0

私の以前の(今削除された)コメントは残念です。私は実際にすでに回答していて、私がその質問を理解したかどうかについて疑問に思ったときに私の答えを削除しました。あなたの質問はほとんど削除されたと思っていましたが、私の答えを元に戻すことができることを親切に指摘したので、今は大丈夫です。あなたの質問はもはや明日削除される資格がありません。 –

答えて

1

アクティブな(強調表示された)ナビゲーションバーの背景を現在のセクションの背景に合わせて変更したい場合は、それを行う:

まず、activate.bs.scrollspyイベントを待ち受けます。このイベントは、スクロールバーが新しいセクションに移動するたびに発生します。これは要素でスクロールする場合、data-spy="scroll"またはwindowの要素で発生します。

そのイベントハンドラ内で、どのセクションがアクティブであるか把握するために.activeを探します。あなたが探しているのは、<a>要素です。複数の要素がある可能性があるので、ドロップダウンメニューは難しい部分です。あなたは最後のものが必要です。あなたがそこに着く方法は、マークアップに依存します。リンクした例では、$('.active').last().children().first()が動作します。

これを実行すると、<a>hrefを取得し、それをクラスに変換してnavbarに適用できます。このイベントが以前に適用したクラスも削除する必要があります。

これにより、各セクションのナビゲーションバーに特定のクラスがあり、そのセクションがアクティブなときにのみ動的に適用されます。残りはCSSで行われます。

CSSは動的クラスをオフにし、アクティブなa要素に背景を適用します。ブートストラップはあなたが上書きしなければならないすべてのクラスで少し迷惑になります。簡単にするために、私はIDを使って、その周りに取得しています:

#navbar.bg-section2 .active a { 
    background-color: #28a745; 
} 

bg-section2を動的に適用するクラスです。

これだけです。以下は実際の例です。それをより良く見るためには "フルページ"をクリックしてください。

var $navbar = $('#navbar'); 
 
var currentClass = 'bg-section1'; 
 

 
$(window).on('activate.bs.scrollspy', function() { 
 
    var $active = $('.active'); 
 
    var $link = $active.last().children().last(); 
 

 
    // Classes have the form "bg-id" (with no # in the id) 
 
    var newClass = 'bg-' + $link.attr('href').slice(1); 
 

 
    $navbar.removeClass(currentClass); 
 
    $navbar.addClass(newClass); 
 

 
    // Keep track of which class is active 
 
    currentClass = newClass; 
 
});
body { 
 
    position: relative; 
 
    padding-top: 50px; 
 
} 
 

 
section { 
 
    padding: 2rem; 
 
    color: #fff; 
 
    min-height: 70vh; 
 
} 
 

 
#section1, 
 
#navbar.bg-section1 .active>a { 
 
    background-color: #007bff; 
 
} 
 

 
#section2, 
 
#navbar.bg-section2 .active>a { 
 
    background-color: #28a745; 
 
} 
 

 
#section3_1, 
 
#navbar.bg-section3_1 .active>a { 
 
    background-color: #ffc107; 
 
} 
 

 
#section3_2, 
 
#navbar.bg-section3_2 .active>a { 
 
    background-color: #17a2b8; 
 
} 
 

 
#section3_3, 
 
#navbar.bg-section3_3 .active>a { 
 
    background-color: #dc3545; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script> 
 

 
<body data-spy="scroll" data-target=".navbar" data-offset="50"> 
 
    <nav class="navbar navbar-fixed-top navbar-inverse"> 
 
    <div class="container-fluid"> 
 
     <div class="navbar-header"> 
 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar"> 
 
     <span class="icon-bar"></span> 
 
     <span class="icon-bar"></span> 
 
     <span class="icon-bar"></span> 
 
     </button> 
 
     <a class="navbar-brand" href="#">Navbar</a> 
 
     </div> 
 
     <div id="navbar" class="collapse navbar-collapse bg-section1"> 
 
     <ul class="nav navbar-nav"> 
 
      <li><a href="#section1">Section 1</a></li> 
 
      <li><a href="#section2">Section 2</a></li> 
 
      <li class="dropdown"> 
 
      <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Section 3</a> 
 
      <ul class="dropdown-menu"> 
 
       <li><a href="#section3_1">Section 3.1</a></li> 
 
       <li><a href="#section3_2">Section 3.2</a></li> 
 
       <li><a href="#section3_3">Section 3.3</a></li> 
 
      </ul> 
 
      </li> 
 
     </ul> 
 
     </div> 
 
    </div> 
 
    </nav> 
 
    <section id="section1"> 
 
    <h2>Section 1</h2> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum voluptate unde facere cupiditate hic, voluptates nobis reiciendis ipsum autem! Deserunt deleniti libero dolores, provident velit repellat. Deleniti omnis, et ipsa.</p> 
 
    </section> 
 
    <section id="section2"> 
 
    <h2>Section 2</h2> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum voluptate unde facere cupiditate hic, voluptates nobis reiciendis ipsum autem! Deserunt deleniti libero dolores, provident velit repellat. Deleniti omnis, et ipsa.</p> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat impedit alias, fugit aliquid, architecto minus nemo nihil odio quam tempore. Odit perspiciatis voluptatum culpa provident. Minus et voluptas facilis delectus.</p> 
 
    </section> 
 
    <section id="section3_1"> 
 
    <h2>Section 3.1</h2> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum voluptate unde facere cupiditate hic, voluptates nobis reiciendis ipsum autem! Deserunt deleniti libero dolores, provident velit repellat. Deleniti omnis, et ipsa.</p> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat impedit alias, fugit aliquid, architecto minus nemo nihil odio quam tempore. Odit perspiciatis voluptatum culpa provident. Minus et voluptas facilis delectus.</p> 
 
    </section> 
 
    <section id="section3_2"> 
 
    <h2>Section 3.2</h2> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum voluptate unde facere cupiditate hic, voluptates nobis reiciendis ipsum autem! Deserunt deleniti libero dolores, provident velit repellat. Deleniti omnis, et ipsa.</p> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat impedit alias, fugit aliquid, architecto minus nemo nihil odio quam tempore. Odit perspiciatis voluptatum culpa provident. Minus et voluptas facilis delectus.</p> 
 
    </section> 
 
    <section id="section3_3"> 
 
    <h2>Section 3.3</h2> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rerum voluptate unde facere cupiditate hic, voluptates nobis reiciendis ipsum autem! Deserunt deleniti libero dolores, provident velit repellat. Deleniti omnis, et ipsa.</p> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat impedit alias, fugit aliquid, architecto minus nemo nihil odio quam tempore. Odit perspiciatis voluptatum culpa provident. Minus et voluptas facilis delectus.</p> 
 
    </section> 
 
</body>

関連する問題