2025/03/31

Safariでwindow.scrollToが効かないとき

Typescript

setTimeoutを使用しよう

スマートフォン用のサイトを作成し、実機で確認していたところSafariのみwindow.scrollYが動作していないことが分かりました。

const scrollToSelect = (id: string) => {
    const element = document.getElementById(id);
    if (!element) return;
    const to = element.getBoundingClientRect().top + window.scrollY;
    window.scrollTo({
        top: to,
        behavior: 'smooth'
    });
}

色々調査しているとsetTimeoutを使用してる記事があり、実装してみたらうまく動きました。

const scrollToSelect = (id: string) => {
    const element = document.getElementById(id);
    if (!element) return;
    const to = element.getBoundingClientRect().top + window.scrollY;
    setTimeout(() => {
        window.scrollTo({
            top: to,
            behavior: 'smooth'
        });
    }, 100);
}

ブラウザごとの対応はめんどくさいですね!

最後に

株式会社Robbitsでは一緒に働く仲間を募集しています!
ご興味のある方は是非一度ホームページをご覧ください!

ホームページを見てみる