勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

JavaScriptのIntersectionObserverを利用して指定した要素が表示されているか確認する方法

   2026/10/14  JavaScript

ブラウザ上で指定した要素が表示されているかチェックし、表示されている場合は何らかのイベントを実行したい。JavaScriptのscrollイベントで対応しようと思ったが、これだとスクロールの度に実行されるので負荷がかかる。IntersectionObserverを使うことで負荷軽減できるみたいなので実装方法をメモ。

 

サンプル

https://taitan916.info/sample/IntersectionObserver/

スクロールして「ターゲット」部分が表示されるとページ上部が「非表示→表示」に切り替わる筈。

 

実装方法

ソースコード

<div class="contents">コンテンツ</div>
<div class="target">ターゲット</div>
<div class="contents">コンテンツ</div>
<div class="check"></div>

<script>
const target = document.querySelector(`.target`);
const options = {
    root: null, //ターゲットが見えるかどうかを確認するためのビューポート
    rootMargin: `0px`, //rootの周りのマージン
    threshold: 1, //ターゲットがどのくらいの割合で見えているか
};
const observer = new IntersectionObserver(displayCheck, options);
observer.observe(target);

function displayCheck(entries){
    entries.forEach(entry => {
        const text = ( entry.isIntersecting ) ? `表示` : `非表示`;
        document.querySelector(`.check`).innerText = text;
    });
}

監視を終了したい場合

今回のケースだと表示・非表示を切り替えるため常時監視で問題無いが、指定した要素が表示されたら1度だけイベントを実行したい、といったような場合はunobserve()で監視を停止すること。

 

リファレンス

https://developer.mozilla.org/ja/docs/Web/API/IntersectionObserver

https://developer.mozilla.org/ja/docs/Web/API/Intersection_Observer_API

 - JavaScript

  関連記事

jQueryで特定のdata属性をセレクタとして指定する方法
jQueryで特定のdata属性をセレクタとして指定する方法

jQueryで特定のdata属性をクリックした際に何らかのイベントを実行したかっ ...

画像にマウスを合わせると拡大表示させる「drift」ライブラリの利用方法
画像にマウスを合わせると拡大表示させる「drift」ライブラリの利用方法

amazon等ECサイトで商品画像にマウスを合わせると当該部分が拡大表示されると ...

AndroidのChromeでハマった点
AndroidのChromeでハマった点

Nexus7(Android4.3)のChromeでハマった。 iPhoneやG ...

leaflet.jsとOSMで現在地を取得しマップ上にマーカーを表示する方法
leaflet.jsとOSMで現在地を取得しマップ上にマーカーを表示する方法

leaflet.jsとOpenStreetMapで現在位置の経度緯度を取得しマッ ...

バニラJavaScriptでdisplay:none/blockの切り替え方法
バニラJavaScriptでdisplay:none/blockの切り替え方法

指定要素の表示非表示を切り替える場合jQueryだとhide/show使うか、t ...