1. 程式人生 > >scrollspy(滾動監聽)的使用方法

scrollspy(滾動監聽)的使用方法

原始碼檔案:
Scrollspy.js

實現功能
1、當滾動區域內設定的hashkey距離頂點到有效位置時,就關聯設定其導航上的指定項
2、使用滾動監聽的話,導航欄必須採用 class="nav"的nav元件才可以。導航必須是 .nav > li > a 結構,並且a上href或data-target要繫結hashkey
3、在定義.nav元件的時候,我們需要把.nav放在另一個容器內(比如div),且該容器需要有一個id屬性(與這裡data-target需要設定的值相同)。

4、你需要給滾動內容的標籤新增 data-spy="scroll"屬性和data-target屬性,data-target與導航父級Id(一定是父級)一致

     data-spy 屬性指明瞭被監聽的元素,data-target屬性指明滾動時需要控制的nav高亮顯示

6、如果監聽Body的滾動,那麼你必須給body新增position:relative樣式

     如果監聽的不是Body,而是其他得元素[貌似這種方式常見],那麼你需要新增三個樣式:position:relative;height:500px;overflow-y:scroll;

栗子如下:

原始碼分析:
1、原理:當滾動容器內的hashkey位置距離容器頂部只有 offset設定的值,就會設定導航中對應的href高亮
2、如果滾動區域是body,會將滾動區域元素標記為window(建構函式中判斷)


this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
3、getScrolHeight:獲取滾動容器的內容高度(包含被隱藏部分)

this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)

4、refresh:重新整理並存儲滾動容器內各hashkey的值
  4.1、預設用offset來獲取定位值,如果滾動區域不是window則用position來獲取

if (!$.isWindow(this.$scrollElement[0])) {
  offsetMethod = 'position'
  offsetBase = this.$scrollElement.scrollTop() //獲取基礎高度,如果滾動區域內有不參與滾動計算的內容
 }

4.2、根據導航上的hashkey來遍歷獲取 滾動區域內的hashkey對應的offset值:

5、process:滾動條事件觸發函式,用於計算當前需要高亮那個導航選單

this.$body
 .find(this.selector)
 .map(function () {
 var $el = $(this)
 var href = $el.data('target') || $el.attr('href')
 var $href = /^#./.test(href) && $(href) //獲取滾動區域內的hashkey對應的元素
 
 return ($href
 && $href.length
 && $href.is(':visible')
 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
 })
 .sort(function (a, b) { return a[0] - b[0] })
 .each(function () {
 that.offsets.push(this[0])
 that.targets.push(this[1])
 })
  5.1、獲取滾動容器已滾動距離:
var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
   5.2、滾動容器可以滾動的最大高度
for (i = offsets.length; i--;) {//遍歷所有的offset
 activeTarget != targets[i] //判斷當前target是否等於activeTarget
 && scrollTop >= offsets[i] //滾動高度>i元素的offset
 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) //i + 1元素不存在,或者i+1元素不大於滾動高度
 && this.activate(targets[i]) //設定i為當前活動項
 }

6、active:設定指定的導航選單高亮
7、clear:清除所有高亮選單

如果大家還想深入學習,可以點選這裡進行學習,再為大家附3個精彩的專題:

以上就是本文的全部內容,希望對大家學習javascript程式設計有所幫助。





相關推薦

scrollspy滾動的使用方法

原始碼檔案:Scrollspy.js實現功能1、當滾動區域內設定的hashkey距離頂點到有效位置時,就關聯設定其導航上的指定項2、使用滾動監聽的話,導航欄必須採用 class="nav"的nav元件才可以。導航必須是 .nav > li > a 結構,並且a上h

addEventListener註冊事件事件

註冊事件的簡單方式:: bth.on事件 = function{ }; 如果重複註冊相同的事件,後面的事件會把前面的事件覆蓋掉。 例子: 輸入一下程式碼,點選事件,控制檯輸出 document.onclick = function () { console.log("厲害"

Android開發08_OnTouchevent觸控事件手勢

一、前言 Android開發中會遇到很多事件監聽事件,例如我們常見的普通控制元件的OnClickListener監聽事件、高階控制元件(ListView、GridView)的OnItemClickLi

Bootstrap外掛——滾動scrollspy.js

         滾動監聽就不細緻的將他的方法屬性或者事件之類的了,我們實現一個根據滑動位置動態改變導航選中選項和根據不同的導航選單選中跳轉到相應的位置的案例 先上效果圖:

Bootstrap 下拉選單和滾動Scrollspy外掛

一、下拉選單外掛 切換下拉選單(Dropdown)外掛的隱藏內容:(1)通過 data 屬性:向連結或按鈕新增 data-toggle="dropdown" 來切換下拉選單:<div class="dropdown"> <a data-toggle="

滾動上面導航下面錨點

就是點選導航一個欄目,會顯示對應的內容 基本使用方法 ** 讓欄目有選中的效果? ** data-spy=“scroll” style=“position: relative” ** 當導航欄和內容框的距離達到多少時,導航欄選中效果會發生切換? **

淺談對Bootstrap的看法之三提示框和彈出框、滾動、小工具

1.提示框和彈出框相關說明:提示框和彈出框效果類似。提示框:通過向元素新增 data-toggle="tooltip" 來建立提示框,<a href="#" data-toggle="tooltip" title="我是提示內容!">滑鼠移動到我這</a&g

android中EditText文字方法:addTextChangedListener

      最近遇到這樣一個問題,想把一個activity文字框中輸入的內容,在跳到另外一個activity時,這個文字框裡的值仍不變。我通過bundle進行了傳遞,但是就是傳不過去。在網上查了資料,原來是沒有用addTextChangedListener()這個方法進行監聽

手機影音第六天 自定義播放器頁面的實現按鈕暫時未

手機影音第六天 自定義播放器布局以及橫豎屏切換播放器時的問題解決 目前進度的項目源代碼托管在裏碼雲上,地址如下: https://git.oschina.net/joy_yuan/MobilePlayer 感興趣的可以去下載看看,多多支持

JAVA 圖形開發之計算器設計事件機制

oncommand image 事件監聽 str one 創建 dac orm mat /*文章中用到的代碼只是一部分,需要源碼的可通過郵箱聯系我 [email protected]*/ 前段時間剛幫同學用MFC寫了個計算器,現在學到JAVA的圖形開發,就試著水了一個計算器

Netflix Eureka原始碼分析3——listenerEurekaBootStrap分析

 web.xml中的listener: <listener> <listener-class>com.netflix.eureka.EurekaBootStrap</listener-class> </listener>

Android 實時監測網路連線狀態變化

看了網上的很多,都不是自己想要的。所以自己就參考著寫了一個。 實現這個的方法很多,我是想的這種,如果哪有不足,有bug的地方希望大家指出,共同進步。。。。 先簡單說一下思路:網路變化時系統會發出廣播。所以我們監聽這個廣播,利用介面回撥通知activity做

Bootstrap 滾動(Scrollspy)

  body {  position: relative;       }  </style></head><body data-spy="scroll" data-target=".navbar" data-offset="50"><

Bootstrap 滾動Scrollspy 呼叫方式

呼叫方式1、data屬性呼叫只需給監聽物件定義 data-spy="scroll" 屬性及 data-target 屬性,就可以啟用滾動監聽外掛。data-target 屬性的值是一個選擇器,它指向擁有滾動監聽功能的頁面元素。本例項中,擁有滾動監聽功能的頁面元素為 id="n

Bootstrap的js外掛之滾動(scrollspy)

data-spy="scroll"——向您想要監聽的元素(通常是 body)新增滾動監聽事件 。 data-target=".navbar"——指明導航條為監聽目標; data-offset="70"——計算滾動位置時相對於頂部的偏移量(畫素數); <!DOCTY

bootstrap滾動外掛Scrollspy橫向和縱向例項對比

bootstrap滾動監聽(Scrollspy)外掛,即自動更新導航外掛,會根據滾動條的位置自動更新對應的導航目標。1.如何建立滾動監聽首先Body的position需要設定為relative.<body data-spy="scroll" data-target=".

Bootstrap 滾動外掛Scrollspy 的事件

事件Bootstrap滾動監聽外掛Scrollspy提供了一個事件 activate,每當一個新的導航專案被啟用時,就會觸發該事件,並自動為導航條的相應選單項添加了一個 .active 類,讓它高亮顯示。關於作者歪脖先生,十五年以上軟體開發經驗,酷愛Web開發,精通 HTML

ORA-12514TNS:程式當前無法識別...的解決方案

在安裝ORACLE 11G 過程中由於配置的原因,安裝過程中報瞭如下錯誤:   按照安裝提示執行後面的操作後,開啟PL/SQL DEVELOPER 連線資料庫時總報ORA-12514: TNS: 監聽程式當前無法識別連線描述符中請求的服務! ORACLE NET

PLSQL Developer 連線Oracle 無需安裝完整oracle,配置

NOTE:當然也可以直接在輸入連線路徑 如圖 前期工作: 檢查oracle伺服器端監聽是否正常工作及瞭解監聽資訊。 1.首先檢查監聽程式是否能正常啟動,開始,執行 cmd--->lsnrctl start,檢查監聽是否是在正常執行,如果正常執行,會提示:TNS-01106: 使用名稱LISTENER的監

JavaScript之事件處理函式

JavaScript之事件處理(監聽)函式事件是使用者和瀏覽器自身進行的特定行為。這些事件都有自己的名字,如click,,load,mouseover。用於響應某個事件而呼叫的函式稱為事件處理函式,或者DOM稱之為事件監聽函式。事件處理函式有兩種分配方式:在JavaScri