最新の Web アプリケーションでは、応答性、効率性、動的な対話性が求められます。 MutationObserver、IntersectionObserver、History API などのネイティブ JavaScript API を使用すると、開発者は外部ライブラリを必要とせずに、これらの課題に直接対処できます。これらの API を詳しく調査し、そのユースケースを理解し、その能力を効果的に活用する方法を学びましょう。
概要:
MutationObserver インターフェイスは DOM ツリー内の変更を監視し、現在非推奨になっている Mutation Events を置き換えます。ノードの追加、削除、変更を検出できるため、動的アプリケーションにとって不可欠なツールとなります。
主な機能:
Q. MutationObserver はどのように機能しますか?
MutationObserver インスタンスは、DOM 内で指定された変更が発生するたびにトリガーされるコールバック関数を使用して作成されます。
MutationObserver のオプション
サブツリー: ターゲット ノードとそのすべての子孫を監視します。
childList: 子ノードの追加または削除を監視します。
attributes: ターゲット ノードの属性への変更を追跡します。
attributeFilter: 監視を指定された属性に制限します。
attributeOldValue: 属性が変更される前の以前の値を取得します。
characterData: ノードのテキスト コンテンツへの変更を監視します。
characterDataOldValue: 変更前のテキスト コンテンツの前の値を取得します。
HTML 構文
<div> <p><strong>JS Syntax</strong><br> </p> <pre class="brush:php;toolbar:false"> const target = document.querySelector('#something') const observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ console.log('Mutation detected:', mutation) }) }) const config = {attributes:true, childList:true, characterData:true, subtree:true} observer.observe(target,config) //observer.disconnect() - to stop observing
使用例:
概要:
IntersectionObserver は、ルート コンテナまたはビューポートに対するターゲット要素の可視性の変化を非同期的に監視するインターフェイスです。これは、遅延読み込み、無限スクロール、分析によく使用されます。
主な機能:
Q.交差点オブザーバーの仕組み
Intersection Observer API は、次のいずれかの状況が発生したときに呼び出されるコールバックをトリガーします。
ターゲット要素は、デバイスのビューポートまたは指定されたルート要素と交差します。
オブザーバーが初めてターゲット要素の監視を開始したとき。
交差点オブザーバーのオプション
root: 可視性をチェックするためのビューポートとして使用される要素。指定しない場合、デフォルトはブラウザのビューポートです。
rootMargin: ルートの周囲のマージン。文字列として指定します (例: "10px 20px")。観測可能範囲を拡大または縮小します。
しきい値: コールバックをトリガーするために必要な可視性のパーセンテージを示す、0 から 1 までの値 (または値の配列)。
Q.交差はどのように計算されますか?
Intersection Observer API は、長方形を使用して交差エリアを計算します。
不規則な形状の要素は、それらを完全に囲む最小の長方形内に収まるものとして処理されます。
部分的に表示される要素の場合、すべての表示部分を含む最小の長方形が使用されます。これにより、要素の形状や可視性に関係なく、測定の一貫性が確保されます。
基本構文
<div> <p><strong>JS Syntax</strong><br> </p> <pre class="brush:php;toolbar:false"> const target = document.querySelector('#something') const observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ console.log('Mutation detected:', mutation) }) }) const config = {attributes:true, childList:true, characterData:true, subtree:true} observer.observe(target,config) //observer.disconnect() - to stop observing
使用例:
高度な機能:
概要:
History API を使用すると、Web アプリケーションでブラウザのセッション履歴を操作できます。これにより、ページをリロードせずにエントリを追加、置換、または変更できます。これは、シングル ページ アプリケーション (SPA) の基礎です。
主な機能:
基本構文:
const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { console.log('Element is visible in the viewport.') // Optionally stop observing observer.unobserve(entry.target) } }) }) // Target elements to observe const targetElement = document.querySelector('.lazy-load') // Start observing observer.observe(targetElement)
使用例:
これらの API の組み合わせ
これらの API は連携して、洗練された Web アプリケーションを作成できます。例:
使用例:
ブログ アプリケーションは、ユーザーが下にスクロールすると (無限スクロール)、投稿を動的に読み込みます。また、ページをリロードせずに URL を更新して現在の投稿を反映するため、ユーザー エクスペリエンスが向上し、SEO が向上します。
<div> <p><strong>JS Syntax</strong><br> </p> <pre class="brush:php;toolbar:false"> const target = document.querySelector('#something') const observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ console.log('Mutation detected:', mutation) }) }) const config = {attributes:true, childList:true, characterData:true, subtree:true} observer.observe(target,config) //observer.disconnect() - to stop observing
結論
MutationObserver、IntersectionObserver、および History API は、動的でインタラクティブな Web アプリケーションのための強力なネイティブ ソリューションを提供します。それらの機能を理解し、それらを効果的に統合することで、開発者は外部ライブラリに大きく依存することなく、パフォーマンスが高く機能が豊富なアプリケーションを構築できます。
以上がネイティブ JavaScript API の概要: MutationObserver、IntersectionObserver、および History APIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。