【リサイズオブザーバー】

Resize Observer とは?

💡 要素のサイズ変化を見逃さない、レイアウト調整の頼れる見張り番
📌 このページのポイント
Resize Observer — 要素のサイズ変化を監視 window.onresize サイドバー コンテンツ ウィンドウ全体しか検知できない Resize Observer 開閉 コンテンツ ←サイズ変化を検知 個別の要素を監視できる コールバックで取得できる情報 contentRect コンテンツ領域のサイズ borderBoxSize ボーダーを含むサイズ
Resize Observerのイメージ
ひよこ ひよこ

ウィンドウのリサイズイベントとは何が違うの?

ペンギン先生 ペンギン先生

window.onresizeはブラウザウィンドウのサイズ変更しか検知できないんだ。Resize Observerは個々の要素を監視できるから、サイドバーの開閉やアコーディオンの展開で要素のサイズが変わったときも検知できるよ

ひよこ ひよこ

たとえばどんなときに使うの?

ペンギン先生 ペンギン先生

グラフやチャートを描画しているコンテナのサイズが変わったときに再描画したり、テキストエリアの自動リサイズに連動してレイアウトを調整したりするのに使えるよ。コンテナクエリが普及する前は、Resize Observerが要素レベルのレスポンシブの主力だったんだ

ひよこ ひよこ

使い方はIntersection Observerと似てるの?

ペンギン先生 ペンギン先生

そうだよ。new ResizeObserver(callback)で作って、observer.observe(element)で監視開始する形は同じパターンだね。コールバックにはcontentRect(要素のサイズ情報)やborderBoxSizeなどが渡されるんだ

ひよこ ひよこ

パフォーマンスは大丈夫?たくさんの要素を監視しても平気?

ペンギン先生 ペンギン先生

ブラウザが内部的にバッチ処理してくれるから、個別にpollingするよりずっと効率的だよ。ただし、コールバック内でサイズを変更すると再度コールバックが発火する無限ループに注意が必要。ResizeObserverLoopErrorというエラーが出たら、このループを疑ってみてね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Resize Observer」って出てきたら「要素のサイズ変化を監視するAPI」と思えればだいたいOK!
📖 おまけ:英語の意味
「Resize Observer」 = リサイズの監視者
💬 Resize(サイズ変更)をObserve(監視)するAPI。ウィンドウではなく個々の要素を監視できるのがポイントだよ
← 用語集にもどる