検索
ホームページウェブフロントエンドjsチュートリアルBootstrapでのスクロールモニター機能の実装

Bootstrapでのスクロールモニター機能の実装

Jul 23, 2017 pm 03:26 PM
bootstrapスクロール

前の言葉

スクロールリスニングプラグインは、スクロールバーの位置に基づいてナビゲーション項目を自動的に更新するために使用されます。ナビゲーション バーの下の領域をスクロールし、ナビゲーション項目の変化に注目してください。ドロップダウン メニュー内の項目も自動的に強調表示されます。この記事では、Bootstrap スクロール モニターの基本的な使い方を詳しく紹介します

スクロール モニタリング プラグインは、スクロール位置に基づいて、ナビゲーション バー内の対応するナビゲーション項目を自動的に更新します。プラグインは、スクロール位置を自動的に検出できます。に到達し、必要に応じて強調表示します アクティブなスタイルがメニューの親要素に追加されます

ナビゲーションにドロップダウン メニューがあり、スクロール領域のコンテンツがドロップダウンに対応する領域に到達した場合メニューのサブ項目では、サブメニューの強調表示に加えて、サブメニューの親要素 (ドロップダウン ボタン ) も強調表示されます

通常の使用では、スクロール監視は一般に 2 つの方法で使用されます。1 つは高さを固定することです。要素をスクロールして、対応するメニューを強調表示する方法と、ページ (本文) 全体を強調表示する方法があります。どちらのメソッドの使用方法も同じで、どちらも次の 3 つの手順が必要です:

1. スクロール コンテナーを設定します。つまり、要素に data-target="#selector" data-spy="scroll" 属性を設定します。監視したい

2、メニューリンクコンテナを設定し、コンテナのID(またはスタイル)とデータ対象の属性に対応するセレクタが一致している必要があります

3.メニューコンテナには、 がなければなりません。 nav スタイル要素であり、その内容に li 要素がなければなりません。li に含まれる a 要素は、強調表示されたメニュー リンクも検出できます。つまり、.nav li > a セレクターの条件を満たします

4.実装メソッドの場合、スクロール監視で監視する必要があるコンポーネントは position:relative; つまり相対配置メソッド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>$(&#39;#scrollspy&#39;).scrollspy({ target: &#39;#myNavbar&#39; })    
</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=""

【要素高さ固定】

activate.bs.scrollspy    每当一个新条目被激活后都将由滚动监听插件触发此事件。

【body要素】
<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(&#39;activate.bs.scrollspy&#39;,function(e){
        $(e.target).siblings().css(&#39;outline&#39;,&#39;none&#39;)
            .end().css(&#39;outline&#39;,&#39;1px solid black&#39;);    
    })
})    
</script>


JS call

in Bootstrap フレームワークでは、JavaScript メソッドを使用してスクロール モニターをトリガーするのは比較的簡単です

+function ($) {//使用es5严格模式'use strict';//}(window.jQuery);

メソッド

スクロールモニタープラグインを使用する場合は、同時にDOMに追加するか、要素を削除した後に、次のようにrefreshメソッドを呼び出す必要があります
  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
  }

なお、この更新メソッドは、宣言的な使用の場合にのみ有効です。 JS トリガーを使用していて DOM を更新する必要がある場合は、プラグインを再適用するか、data-scrollspy 属性からインスタンスを取得してから、refresh メソッドを呼び出す必要があります
[パラメータ]

data 属性または JavaScript を通じてパラメータを渡します。 data 属性の場合、その名前は data- にパラメータ名を追加したものになります。たとえば、data-offset="" です
スクロール監視ではオフセットパラメータが提供されます。このパラメータのデフォルト値は 10 です。デフォルトでは、スクロールするコンテンツがスクロールするコンテナーの 10 ピクセル以内にある場合、対応するメニュー項目が強調表示されます

[イベント]
スクロール監視では、イベントのサブスクリプションとトリガー機能もサポートされています。現在、1 つのアクティブ化イベントのみがサポートされています

  //获取滚动容器的滚动高度
  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 。 🎜 🎜<pre class="brush:php;toolbar:false">  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
🎜🎜🎜🎜🎜 🎜🎜JSソースコード🎜🎜【1】IIFE🎜🎜 プラグイン内のコードがリークしないように即時呼び出し関数を使用し、閉じたループを形成し、jQueryのソースコードからのみ展開できます。 fn🎜🎜
  $.fn.scrollspy.noConflict = function () {     //恢复以前的旧代码$.fn.scrollspy = old//将$.fn.scrollspy.noConflict()设置为Bootstrap的Scrollspy插件return this
  }
🎜 🎜【2】初期設定🎜🎜
  $(window).on('load.bs.scrollspy.data-api', function () {//遍历所有符合条件的滚动容器$('[data-spy="scroll"]').each(function () {      var $spy = $(this)      //执行scrollspy插件,并传入滚动容器上设置的自定义参数(data-开头)      Plugin.call($spy, $spy.data())
    })
  })
🎜🎜【3】プラグインコアコード🎜🎜rrreee🎜🎜【4】jQueryプラグイン定義🎜🎜rrreee🎜🎜【5】競合対策処理🎜🎜rrreee 🎜🎜【6】バインディングトリガーイベント🎜🎜rrreee🎜🎜🎜

以上がBootstrapでのスクロールモニター機能の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール