検索
ホームページウェブフロントエンドhtmlチュートリアルbootstrap源码分析之scrollspy(滚动侦听)

源码文件:

Scrollspy.js

实现功能

1、当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项
2、导航必须是 .nav > li > a 结构,并且a上href或data-target要绑定hashkey
3、菜单上必须有.nav样式
4、滚动区域的data-target与导航父级Id(一定是父级)要一致

<span style="color: #800000"><div id="selector" class="navbar navbar-default">
    <ul class="nav navbar-nav">
        <li>
<a href="#one">one</a> </li>
        <li>
<a href="#two">two</a> </li>
        <li>
<a href="#three">three</a> </li>
    </ul>
</div>
<div data-spy="scroll" data-target="#selector" style="height:100px; overflow:hidden;overflow-y: auto;">
    <h4 id="ibe">ibe</h4>
<p>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br></p>
    <h4 id="two">two</h4>
<p>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br></p>
    <h4 id="three">three</h4>
<p>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br>One的具体内容<br></p>
</div></span>

源码分析:

1、原理:当滚动容器内的hashkey位置距离容器顶部只有 offset设置的值,就会设置导航中对应的href高亮
2、如果滚动区域是body,会将滚动区域元素标记为window(构造函数中判断)

<span style="color: #0000ff">this</span>.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
3、getScrolHeight:获取滚动容器的内容高度(包含被隐藏部分)
<span style="color: #0000ff">this</span>.$scrollElement[0].scrollHeight || Math.max(<span style="color: #0000ff">this</span>.$body[0].scrollHeight, document.documentElement.scrollHeight)
4、refresh:刷新并存储滚动容器内各hashkey的值
  4.1、默认用offset来获取定位值,如果滚动区域不是window则用position来获取
<span style="color: #0000ff">if</span> (!$.isWindow(<span style="color: #0000ff">this</span>.$scrollElement[0<span style="color: #000000">])) {
      offsetMethod </span>= 'position'<span style="color: #000000">
      offsetBase   </span>= <span style="color: #0000ff">this</span>.$scrollElement.scrollTop() <span style="color: #008000">//</span><span style="color: #008000">获取基础高度,如果滚动区域内有不参与滚动计算的内容</span>
   }
  4.2、根据导航上的hashkey来遍历获取 滚动区域内的hashkey对应的offset值:
<span style="color: #0000ff">this</span><span style="color: #000000">.$body
     .find(</span><span style="color: #0000ff">this</span><span style="color: #000000">.selector)
      .map(</span><span style="color: #0000ff">function</span><span style="color: #000000"> () {
        </span><span style="color: #0000ff">var</span> $el   = $(<span style="color: #0000ff">this</span><span style="color: #000000">)
        </span><span style="color: #0000ff">var</span> href  = $el.data('target') || $el.attr('href'<span style="color: #000000">)
        </span><span style="color: #0000ff">var</span> $href = /^#./.test(href) && $(href) <span style="color: #008000">//</span><span style="color: #008000">获取滚动区域内的hashkey对应的元素</span>

        <span style="color: #0000ff">return</span><span style="color: #000000"> ($href
          </span>&&<span style="color: #000000"> $href.length
          </span>&& $href.is(':visible'<span style="color: #000000">)
          </span>&& [[$href[offsetMethod]().top + offsetBase, href]]) || <span style="color: #0000ff">null</span><span style="color: #000000">
      })
      .sort(</span><span style="color: #0000ff">function</span> (a, b) { <span style="color: #0000ff">return</span> a[0] - b[0<span style="color: #000000">] })
      .each(</span><span style="color: #0000ff">function</span><span style="color: #000000"> () {
        that.offsets.push(</span><span style="color: #0000ff">this</span>[0<span style="color: #000000">])
        that.targets.push(</span><span style="color: #0000ff">this</span>[1<span style="color: #000000">])
      })</span>
5、process:滚动条事件触发函数,用于计算当前需要高亮那个导航菜单
   5.1、获取滚动容器已滚动距离:
<span style="color: #0000ff">var</span> scrollTop    = <span style="color: #0000ff">this</span>.$scrollElement.scrollTop() + <span style="color: #0000ff">this</span>.options.offset
  5.2、滚动容器可以滚动的最大高度
<span style="color: #008000">//</span><span style="color: #008000">最大可以滚动高度=滚动设置距离(offset)+ 滚动容器内容高度 - 滚动容器设置的高度</span>
<span style="color: #0000ff">var</span> maxScroll    = <span style="color: #0000ff">this</span>.options.offset + scrollHeight - <span style="color: #0000ff">this</span>.$scrollElement.height()
   5.3、设置滚动元素逻辑:
<span style="color: #0000ff">for</span> (i = offsets.length; i--;) {<span style="color: #008000">//</span><span style="color: #008000">遍历所有的offset</span>
     activeTarget != targets[i] <span style="color: #008000">//</span><span style="color: #008000">判断当前target是否等于activeTarget</span>
        && scrollTop >= offsets[i] <span style="color: #008000">//</span><span style="color: #008000">滚动高度>i元素的offset</span>
        && (offsets[i + 1] === undefined || scrollTop //<span style="color: #008000">i + 1元素不存在,或者i+1元素不大于滚动高度</span>
        && <span style="color: #0000ff">this</span>.activate(targets[i]) <span style="color: #008000">//</span><span style="color: #008000">设置i为当前活动项</span>
    }
6、active:设置指定的导航菜单高亮
7、clear:清除所有高亮菜单
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
テキストからウェブサイトへ:HTMLの力テキストからウェブサイトへ:HTMLの力Apr 13, 2025 am 12:07 AM

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

HTML、CSS、およびJavaScriptの理解:初心者向けガイドHTML、CSS、およびJavaScriptの理解:初心者向けガイドApr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

HTMLとコード:用語を詳しく見るHTMLとコード:用語を詳しく見るApr 10, 2025 am 09:28 AM

htmlisaspecifictypeofcodefocuseduructuringwebcontent

HTML、CSS、およびJavaScript:Web開発者に不可欠なツールHTML、CSS、およびJavaScript:Web開発者に不可欠なツールApr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

HTML、CSS、およびJavaScriptの役割:コアの責任HTML、CSS、およびJavaScriptの役割:コアの責任Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLは初心者のために簡単に学ぶことができますか?HTMLは初心者のために簡単に学ぶことができますか?Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTMLでの開始タグの例は何ですか?HTMLでの開始タグの例は何ですか?Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター