Intersection Observer APIの使い方について確認します。スクロールして要素が表示されたタイミングで処理を実行したいケースに活用できます。( 画像の遅延読み込み
コンテンツの追加読み込み
など)
目次
利用可能ブラウザ
https://caniuse.com/#feat=intersectionobserver
IEではサポートされてないので、polyfillが必要です。
https://github.com/w3c/IntersectionObserver/tree/master/polyfill
Intersection Observerの使い方
// イベント発火時のコールバック関数
const callback = (entries, observer) => {
entries.forEach(entry => {
console.log(entry.target)
console.log(entry.time)
console.log(entry.isIntersecting)
console.log(entry.intersectionRatio)
console.log(entry.boundingClientRect)
console.log(entry.intersectionRect)
console.log(entry.rootBounds)
})
}
// Intersection Observerのインスタンス生成
const options = {
root: null,
rootMargin: '0px',
threshold: 0
}
const observer = new IntersectionObserver(callback, options)
// ターゲット要素を登録
const target = document.querySelector('#target')
observer.observe(target)
// observer.unobserve(target) // 指定要素の監視をやめる
// observer.disconnect() // 全要素の監視をやめる
IntersectionObserverコンストラクタ
でインスタンス生成後、observeメソッド
で対象要素を監視することができます。
IntersectionObserver
で指定可能な options
については、後述する動作例で説明します。
動作例
- target1
threshold: 1.0
と指定しているため、要素が全て表示されたタイミングでコールバックが実行されます。
- target2
rootMargin
を指定して、要素が表示される前にコールバックを実行するようにしています。
- target3
threshold
を複数設定しています。- 要素の表示割合が
0%
25%
50%
75%
100%
のタイミングでコールバックが実行されます。