Sticky コンポーネントを使用してタブ ナビゲーションとスクロール ナビゲーションを実装する方法
スティッキー コンポーネントは通常、Web ページが特定の領域でスクロールするときに、ユーザーが機能をすばやく実行できるように、ナビゲーション バーやツールバーなどの要素がページの上部または下部に固定されます。そのような要素によって提供されます。
この記事では、Sticky コンポーネントの実装の改善 では、Sticky コンポーネントの改良版を提供し、デモンストレーション効果をブログに適用しています。 Sticky のようなシンプルなコンポーネントを使用すると、この記事で紹介するタブ ナビゲーションやスクロール ナビゲーションなど、よりリッチなエフェクトを開発することができます。実装は簡単で、デモンストレーション効果は次のとおりです:
タブ ナビゲーション (tab-sticky.html に対応):
スクロール ナビゲーション (nav-scroll-sticky.html に対応):
1. タブナビゲーションの実装
タブ ナビゲーションの要件は次のとおりです。ナビゲーション項目をクリックすると、タブのコンテンツを切り替えるだけでなく、スクロールを制御し、表示するタブのコンテンツを一番上に配置し、スティッキー要素のすぐ下に表示する必要があります。デモはブートストラップで作成しているため、ブートストラップが提供するタブコンポーネントは非常にシンプルで使いやすく、タブコンポーネントが提供するshow.bs.tabのイベントコールバック内でスクロール制御処理を行うことができるので、この効果は比較的簡単です。実装するには:
<script> var $target = $('#target'); new Sticky('#sticky', { unStickyDistance: 60, target: $target, wait: 1, isFixedWidth: false, getStickyWidth: function($elem) { return $elem.parent()[0].offsetWidth; } }); $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { window.scrollTo(0, $target[0].getBoundingClientRect().top + getPageScrollTop() + 1); }); function getPageScrollTop() { return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; } </script>
html 構造:
2. スクロールナビゲーションの実装
タブ コンポーネントでは、現在アクティブなタブ項目に対応するタブ コンテンツのみが表示されます。その要件は、ナビゲーションされるすべてのコンテンツです。
1) ナビゲーション項目をクリックすると、ページのスクロールを制御し、クリックされたナビゲーション項目に対応するコンテンツが自動的に上部に表示され、スティッキー要素のすぐ下に表示されます。
2) ページがスクロールすると、現在表示されているナビゲーション コンテンツに基づいて、アクティブなスタイルが対応するナビゲーション項目に自動的に追加されます。複雑そうに見えますが、デモでの実装は比較的簡単です。
<script> var $sticky = $('#sticky'); var $target = $('#target'); new Sticky($sticky, { unStickyDistance: 60, target: $target, wait: 1, isFixedWidth: false, getStickyWidth: function ($elem) { return $elem.parent()[0].offsetWidth; } }); var offsetTop = 60; //实现点击tab项自动滚动到导航内容的效果 $sticky.on('click', 'a', function (e) { e.preventDefault(); var $this = $(e.currentTarget); var $parent = $this.parent(); if($parent.hasClass('active')) return; $sticky.find('li.active').removeClass('active'); $parent.addClass('active'); var target = $this.data('target') || $this.attr('href'); var $target = $(target); window.scrollTo(0, Math.floor($target[0].getBoundingClientRect().top) + getPageScrollTop() - offsetTop); }); /** * Math.floor是解决rect.top或rect.bottom带小数问题 */ //实现滚动时根据当前显示的导航内容自动给相应的导航项添加active样式 $(window).scroll(throttle(function(){ var $curItem = $sticky.find('a').filter('[href=' + getCurTarget() + ']'); var $parent = $curItem.parent(); if($parent.hasClass('active')) return; //最后的blur是为了去掉:active及:focus伪类的样式 $sticky.find('li.active').removeClass('active').find('a').trigger('blur'); $parent.addClass('active'); },1)); //获取当前显示的导航内容元素的id function getCurTarget() { for(var targets = ['#First', '#Second', '#Third'], i = 0, l = targets.length; i < l; i++) { var curRect = $(targets[i])[0].getBoundingClientRect(); if(Math.floor(curRect.top) <= offsetTop && Math.floor(curRect.bottom) > offsetTop) { return targets[i]; } } return targets[0]; } function getPageScrollTop() { return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; } //这个函数在实际工作中是应该抽出来的,否则sticky.js里面还有一份重复的 function throttle(func, wait) { var timer = null; return function () { var self = this, args = arguments; if (timer) clearTimeout(timer); timer = setTimeout(function () { return typeof func === 'function' && func.apply(self, args); }, wait); } } </script>
3. 概要
この記事では、スティッキー コンポーネントを組み合わせて、IE9+、Firefox、Chrome と互換性のある 2 つのナビゲーション効果の実装を提供します。興味がある場合は、ソース コードをダウンロードして詳細を確認してください。タブ ナビゲーションを実装する場合、bs タブ コンポーネントにより実装が非常に簡単になります。結局のところ、新しいコンポーネントを形成するためにスティッキー コンポーネントとタブ コンポーネントをカプセル化する必要はありません。スクロール ナビゲーションを実装する場合、タブ コンポーネントは使用されないため、実際の状況では、これら 2 つの機能を 2 つの独立したコンポーネントまたは 1 つのコンポーネントにカプセル化できます。ただし、この 2 つのコンポーネントの記述方法については、この記事の主な内容ではないため、詳しくは紹介しません。実際にはこれを実行したいと思います。このブログではこれら 2 つのコンポーネントを紹介します。単純なもののためにホイールを作成しないのは機会の無駄です。これら 2 つの効果を達成すると、次の 2 つの利点もあります:1) Firefox および IE では、まず Web ページを更新してから、Web ページが更新された位置に表示されますが、スクロール関連のコンポーネントを作成すると、スクロール イベントはトリガーされません。将来的には、コンポーネントが初期化されるときに主導権を握る必要があります。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...
