瀏覽Bootstrap網站的時候,頁面右邊欄的導航會跟隨頁面的滾動而變動。這個效果可以由Bootstrap的jQuery組件:Affix與 scrollspy 整合來實現。

完整展示

See the Pen Bootstrap’s Affix and ScrollSpy plugins by Jimmy_Wu (@Jimmy_Wu) on CodePen.


Affix-js

Affix 插件將幫助我們「修正」我們的導航部分的位置,同時允許我們向這個固定元素添加垂直偏移,這取決於用戶滾動的位置。
要在我們的項目中使用 Affix 插件,我們必須指定將接收「affix」行為的元素。 我們可以通過添加 data-spy="affix" 屬性/值來實現。 在我們的例子中,所需的元素是ul元素。

1. data-spy="affix" 會使得 class 自動產生 affix-top 類,表示元素在其最高的位置。
bootstrap-Affix在html內

2.當元素從屏幕開始滾動時添加的 affix 類,並將 position: fixed 屬性應用於它。
bootstrap-Affix在html內-2

3. affix-bottom 類,指示元素的 bottom 偏移。
bootstrap-Affix在html內-3

ul 元素具有 affix-top 類。 當「滾動」超過元素的初始 top 位置時, ul 接收到 affix 類並且其位置更改為 fixed 。 然後我們設置其新的 top (嘗試改變其值以查看差異)位置和 width 屬性,其中例中因為有 hidden-xs 類,所以手機版是不會出現的,下面是 css 在大於 1200px 後更改寬度。

滾動時, ul 被固定到頁面的頂部。 終想停止釘住通過使用 affix-bottom 類來做到這一點。
為了使插件觸發這個類,我們必須指定目標元素的 bottom 偏移量。使用自定義屬性或 jQuery / JavaScript 來實現。

這個階段,我們必須使用CSS來指定元素的定位類型。應用 position: absoluteposition: relative


ScrollSpy-js

ScrollSpy 添加到我們的項目中,必須在頁面滾動期間定義要「ScrollSpy (間諜)」的元素。 通常這將是 body 元素。 ScrollSpy 需要使用 Bootstrap 導航組件 。

1.將 data-spy="scroll" 屬性 / 值應用於 "spied" body 元素。 Bootstrap 建議將 spied 元素的位置設為 relative

2. 通過將 data-target 屬性添加到我們所監視的元素(例中是body),確定要跟蹤的元素的特定部分。 此屬性的值應與 nav 組件的父級的 id 或 class 相匹配。 所以 body 標籤看起來像這樣 (注意:包括作為 data-* 屬性的值的一部分)

簡言之注意 body 內的 data-target=".scrollspy",與反應對象上的 scrollspy 類,而 ul 中的 data-spy="affix" (affix-js)的關係。

唯一必要的CSS

active 類添加到 li 子元素。
應用到 nav 組件的樣式。 注意樣式考慮到使用嵌套的 nav 組件。


資料來源:

瞭解Bootstrap的Affix和ScrollSpy插件