前面的話 Affix 插件主要功能就是通過插件給某個元素(需要固定的元素)添加或刪除position:fixed,實現元素在瀏覽器視窗的粘性固定效果。本文將詳細介紹Bootstrap自動定位浮標 基本用法 首先,來看一個蘋果官網對自動定位浮標的應用 從上面的git圖中可知,Macbook一欄滾動到一 ...
前面的話
Affix 插件主要功能就是通過插件給某個元素(需要固定的元素)添加或刪除position:fixed,實現元素在瀏覽器視窗的粘性固定效果。本文將詳細介紹Bootstrap自動定位浮標
基本用法
首先,來看一個蘋果官網對自動定位浮標的應用
從上面的git圖中可知,Macbook一欄滾動到一定高度時,固定在視窗頂部便不再移動
Affix 插件可以對任何元素進行固定定位,其中比較簡單的方法,就是通過自定義屬性 data 來觸發。其主要包括兩個參數:
1、data-spy:取值 affix,表示元素是固定不變的。
2、data-offset:整數值,比如 90,表示元素 top 和 bottom 的值都是 90px,其包括兩種方式:data-offset-top 和 data-offset-bottom
data-offset-top 用來設置元素距離頂部的距離。比如 90,表示元素距離頂部 90px,當用戶從頂部向下拖動滾動條,當滾動的距離大於 90px 時,affix 元素不再滾動,就會固定在瀏覽器視窗頂部
data-offset-bottom 剛好與 data-offset-top 相反
<div data-spy="affix" data-offset="90">affix元素</div>
<!-- 等價 -->
<div data-spy="affix" data-offset-top="90" data-offset-bottom="90">affix元素</div>
【設置CSS】
在使用Affix插件時,必須通過 CSS 定位內容。Affix插件在三種 class 之間切換,每種 class 都呈現了特定的狀態: .affix、.affix-top 和 .affix-bottom
1、在開始時,插件添加 .affix-top 來指示元素在它的最頂端位置。這個時候不需要任何的 CSS 定位
2、當滾動經過添加了Affix的元素時,應觸發實際的Affix。此時 .affix 會替代 .affix-top,同時設置 position: fixed(由 Bootstrap 的 CSS 代碼提供)
這時,需要手動設置.affix,如.affix{top:0;}表示停止在視窗頂部
3、如果定義了底部偏移,當滾動到達該位置時,應把 .affix 替換為 .affix-bottom。由於偏移是可選的,假如設置了該偏移,則要求同時設置適當的 CSS。在這種情況下,請在必要的時候添加 position: absolute;
<style> .test{width: 100%;height: 50px;background-color:lightgreen;} .affix{top:0px;} </style> </head> <body style="height:1000px;" > <div style="height:100px"></div> <div data-spy="affix" data-offset="100" class="test"></div> </body>
JS觸發
有時候,使用該插件,其頂部和底部的高度不一定是固定的,所以在初始化時使用聲明式用法不太合適。這時,使用javascript用法就顯得比較靈活了,因為它不僅支持傳入數字型的offset,還支持傳入能夠動態計算offset的function函數
<script> $('#myAffix').affix({ offset: { top:100, bottom: function () { return (this.bottom = $('footer').outerHeight(true)) } } }) </script>
【事件】
affix組件提供了6種事件,即affix和affixed各對應於3種狀態(普通、top、bottom)時的事件
affix.bs.affix 在定位結束之前立即觸發 affixed.bs.affix 在定位結束之後立即觸發 affix-top.bs.affix 在定位元素應用affixed-top效果之前立即觸發 affixed-top.bs.affix 在定位元素應用affixed-top效果之後立即觸發 affix-bottom.bs.affix 在定位元素應用affixed-bottom效果之前立即觸發 affixed-bottom.bs.affix 在定位元素應用affixed-bottom效果之後立即觸發
<style> .test{width: 100%;height: 50px;background-color:lightgreen;} header{height: 100px;} .affix{top:0px;} </style> </head> <body style="height:1000px;"> <header></header> <div data-spy="affix" class="test"></div> <script> $(function(){ $('.test').affix({ offset:{ top:function(){ return (this.top = $('header').outerHeight(true)) } } }).on('affix.bs.affix',function(){ $(this).html('我被固定在視窗頂部'); }).on('affix-top.bs.affix',function(){ $(this).html('我正跟隨滾動條滾動'); }) }) </script>