Open1
iframeのスクロール検知

Next.jsでIframe内のスクロールを検知する
iframeにjs追加
今回は一番下までスクロールされたかを検知するようにします。
任意のJSファイルを作成し、以下のコードを貼り付けてください。
今回はscroll.js
というファイルを作成しました。
window.addEventListener('scroll', () => {
const origin = window.location.origin;
const isScrolledToBottom = window.scrollY + window.innerHeight >= document.body.scrollHeight;
window.parent.postMessage({ isScrolledToBottom }, origin);
});
以下の部分でオリジンを取得しています。
const origin = window.location.origin;
以下の部分で一番下までスクロールしたかを検知しています。
isScrolledToBottom
にはbool値が格納されます。
const isScrolledToBottom = window.scrollY + window.innerHeight >= document.body.scrollHeight;
以下の部分でiframeを読み込んでいる親ページ(オリジン)にメッセージを投げています。
window.parent.postMessage({ isScrolledToBottom }, origin);
作成したJSファイルをiframeのHTML内に含めてください。
...
</div>
<script src="../js/scroll.js"></script>
</body>
...
next.jsのiframeを読み込んでいるファイルに以下を追加してください。
Next.jsに追加
...
// 一番下までスクロールされたかを管理
const [isScrolledToBottom, setIsScrolledToBottom] = useState<boolean>(false);
// scroll.jsでの判定結果を格納
const handleScrollEvent = (event: any) => {
if (event.data.isScrolledToBottom !== undefined) {
setIsScrolledToBottom(event.data.isScrolledToBottom);
}
};
useLayoutEffect(() => {
// iframeから飛ばされたイベントを取得
window.addEventListener('message', handleScrollEvent);
return () => {
window.removeEventListener('message', handleScrollEvent);
};
}, []);
...