前面的話
滾動監聽外掛程式是用來根據捲軸所處的位置來自動更新導覽項目的。捲動導覽條下面的區域並關注導覽項目的變化,下拉式選單中的項目也會自動高亮顯示。本文將詳細介紹Bootstrap滾動監視器
基本用法
滾動監聽插件是根據滾動的位置自動更新導航條中相應的導航項目的,該插件可自動偵測到達哪個位置了,然後在需要高亮的選單父元素上加了一個active樣式
如果導航裡有下拉式選單,並且捲動區域的內容到達下拉選單子項目所對應的區域,除了子選單高亮之外,子選單的父元素(dropdown按鈕)也會高亮
在平時使用的過程中,滾動監聽一般有兩種用法,一種是固定一個元素的高度,進行捲動,然後對對應的選單進行高亮顯示;另一種是對整個頁面(body)進行滾動監聽。兩種方式的用法一樣,都需要有如下3個步驟:
1、設定滾動容器,即在所要監聽的元素上設定data-target="#selector" data-spy="scroll"屬性
2、設定選單連結容器,該容器的id(或樣式)和data-target屬性所對應的選擇子要一致
3、在選單容器內,必須有. nav樣式的元素,並且在其內容有li元素,li內包含的a元素也是可以探測高亮的菜單鏈接,即符合.nav li > a這種選擇符的條件
4 、無論何種實作方式,捲動監聽都需要被監聽的元件是 position: relative;
即相對定位方式
【固定元素高度】
<div> <ul> <li><a>HTML</a></li> <li><a>CSS</a></li> <li><a>javascript</a></li> </ul> </div><div> <h4 id="Html">Html</h4> <p>Html内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <h4 id="CSS">CSS</h4> <p>CSS内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <h4 id="javascript">javascript</h4> <p>javascript内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> </div>
【body元素】
<div> <ul> <li><a>HTML</a></li> <li><a>CSS</a></li> <li><a>javascript</a></li> </ul> </div><h4 id="Html">Html</h4><p>Html内容</p><br><p>...</p><br><p>...</p><br><p>...</p><h4 id="CSS">CSS</h4><p>CSS内容</p><br><p>...</p><br><p>...</p><br><p>...</p><h4 id="javascript">javascript</h4><p>javascript内容</p><br><p>...</p><br><p>...</p><br><p>...</p><br><p>...</p><br><p>...</p><br><p>...</p>
#
#JS呼叫
在Bootstrap框架中,使用JavaScript方法觸發滾動監控器相對來說較為簡單,只需要指定兩個容器的名稱即可
<div> <ul> <li><a>HTML</a></li> <li><a>CSS</a></li> <li><a>javascript</a></li> </ul> </div><div> <h4 id="Html">Html</h4> <p>Html内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <h4 id="CSS">CSS</h4> <p>CSS内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <h4 id="javascript">javascript</h4> <p>javascript内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> </div><script>$('#scrollspy').scrollspy({ target: '#myNavbar' }) </script>
方法
當使用滾動監聽外掛程式的同時在DOM 中新增或刪除元素後,需要像下面這樣呼叫此刷新( refresh) 方法
$('[data-spy="scroll"]').each(function () { var $spy = $(this).scrollspy('refresh') })
要注意的是,這種refresh方法只對宣告式用法有效。如果使用的是JS觸發,並且需要刷新DOM,則需要重新套用該插件;或從data-scrollspy屬性上取得該實例,然後再呼叫refresh方法
【參數】
#可以透過data 屬性或JavaScript 傳遞參數。對於data 屬性,其名稱是將參數名稱附著到 data-
後面組成,例如 data-offset=""
滾動監控提供了一個offset參數,此參數預設值為10。預設情況下,滾動內容距離滾動容器10px以內的話,就高亮顯示所對應的選單項目
【事件】
滾動監控也支援事件的訂閱和觸發功能,目前只支援一個activate事件
activate.bs.scrollspy 每当一个新条目被激活后都将由滚动监听插件触发此事件。
<div> <ul> <li><a>HTML</a></li> <li><a>CSS</a></li> <li><a>javascript</a></li> </ul> </div><div> <h4 id="Html">Html</h4> <p>Html内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <h4 id="CSS">CSS</h4> <p>CSS内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <h4 id="javascript">javascript</h4> <p>javascript内容</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> <br><p>...</p> </div><script>$(function(){ $("#myNavbar").on('activate.bs.scrollspy',function(e){ $(e.target).siblings().css('outline','none') .end().css('outline','1px solid black'); }) }) </script>
#
JS原始碼
#【1】 IIFE
使用立即呼叫函數,防止外掛程式內程式碼外洩,從而形成一個閉環,並且只能從jQuery的fn裡進行擴展
+function ($) {//使用es5严格模式'use strict';//}(window.jQuery);
#【2】初始設定
function ScrollSpy(element, options) {this.$body = $(document.body)//判断滚动容器是否是body,如果是则使用window,如果不是则使用该元素本身this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)//将默认值和传进来的options参数合并,后者优先级高this.options = $.extend({}, ScrollSpy.DEFAULTS, options)//如果option里设置了target,即data-target有值,则优先使用//如果没有,则查找通过.nav样式的子元素,即.nav样式内的li子元素内的a链接,作为菜单容器this.selector = (this.options.target || '') + ' .nav li > a'this.offsets = []this.targets = []//高亮显示的菜单this.activeTarget = nullthis.scrollHeight = 0//给滚动容器绑定滚动事件this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))//计算当前页面内所有滚动容器内的id集合和每个id元素距离浏览器顶部的像素距离this.refresh()//开始正式处理this.process() } //版本是3.3.7 ScrollSpy.VERSION = '3.3.7' //默认值为offset:10 ScrollSpy.DEFAULTS = { offset: 10 }
【3】外掛核心程式碼
//获取滚动容器的滚动高度 ScrollSpy.prototype.getScrollHeight = function () {//获取特定滚动容器的滚动高度,如果没有则获取body元素的滚动高度return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) } ScrollSpy.prototype.refresh = function () {var that = thisvar offsetMethod = 'offset'var offsetBase = 0this.offsets = []this.targets = []this.scrollHeight = this.getScrollHeight()if (!$.isWindow(this.$scrollElement[0])) { offsetMethod = 'position' offsetBase = this.$scrollElement.scrollTop() }this.$body .find(this.selector) .map(function () {var $el = $(this)var href = $el.data('target') || $el.attr('href')var $href = /^#./.test(href) && $(href)//返回一个二维数组,每个滚动容器内的id对象到页面顶部的距离以及高亮菜单容器里所对应的href值return ($href && $href.length && $href.is(':visible') && [[$href[offsetMethod]().top + offsetBase, href]]) || null }) .sort(function (a, b) { return a[0] - b[0] }) .each(function () {//收集所有的偏移值,也就是距离top的距离that.offsets.push(this[0])//收集菜单容器里的所有href值,也就是滚动容器里的id值that.targets.push(this[1]) }) } ScrollSpy.prototype.process = function () {//获取滚动容器的scrollTop,再加上设置的offset值var scrollTop = this.$scrollElement.scrollTop() + this.options.offset//获取滚动高度var scrollHeight = this.getScrollHeight()//最大滚动=总scrollheight + 设置的offset值 - 设置高度heightvar maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()var offsets = this.offsetsvar targets = this.targetsvar activeTarget = this.activeTargetvar iif (this.scrollHeight != scrollHeight) { this.refresh() }//如果超过了最大滚动,说明已经滚动到底了if (scrollTop >= maxScroll) { //如果最后一个元素还没有高亮,则设置最后一个元素高亮 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) }if (activeTarget && scrollTop = offsets[i]//i+1元素不存在,或者i+1元素大于滚动高度&& (offsets[i + 1] === undefined || scrollTop
【4】jQuery外掛程式定義
##function Plugin(option) {//根据选择器,遍历所有符合规则的元素return this.each(function () { var $this = $(this) //获取自定义属性bs.scrollspy的值 var data = $this.data('bs.scrollspy') //如果option参数是对象,则作为ScrollSpy的参数传入 var options = typeof option == 'object' && option //如果值不存在,则将ScrollSpy实例设置为bs.scrollSpy值 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) //如果option传递了string,则表示要执行某个方法 if (typeof option == 'string') data[option]() }) } var old = $.fn.scrollspy //保留其他库的$.fn.scrollspy代码(如果定义的话),以便在noConflict之后可以继续使用该老代码 $.fn.scrollspy = Plugin //重设插件构造器,可以通过该属性获取插件的真实类函数 $.fn.scrollspy.Constructor = ScrollSpy
$.fn.scrollspy.noConflict = function () { //恢复以前的旧代码$.fn.scrollspy = old//将$.fn.scrollspy.noConflict()设置为Bootstrap的Scrollspy插件return this }【6】綁定觸發事件
$(window).on('load.bs.scrollspy.data-api', function () {//遍历所有符合条件的滚动容器$('[data-spy="scroll"]').each(function () { var $spy = $(this) //执行scrollspy插件,并传入滚动容器上设置的自定义参数(data-开头) Plugin.call($spy, $spy.data()) }) })
以上是Bootstrap中滾動監視器功能實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),