window.onresizeでスクロールに惑わされない
window.onresizeでスクロールに惑わされないwindow.addEventListener("resize", _onresize);
resizeイベントが発生するブラウザもあります。残念なことに今回はその程度の変化で頻繫に実行したくない処理だったので、対策を取りました。
document.onscroll
document.onscrolllet documentIsScrolled = false;
window.addEventListener("scroll", () => documentIsScrolled = true);
window.addEventListener("scrollend", () => documentIsScrolled = false);
window.addEventListener("resize", event => {
if (!documentIsScrolled) {
_onresize(event);
}
});
scrollendイベントと組み合わせて、スクロールされていない間だけ処理を実行するようにしました。
ResizeObserver
ResizeObserverconst observer = new ResizeObserver(_callback);
for (const target of document.querySelectorAll(".target")) {
observer.observe(target);
}
resizeイベントを使っていた理由を振り返って、本当に検出したかったものを思い出しました。今回、本当に知りたかったことは特定の要素の寸法の変化でした。これはresizeでは難しかったので、ResizeObserverに乗り換えresizeの利用をやめました。