フェード時間とスクロール速度、スクロール位置を一箇所で調整可能なトップへ戻るボタンを表示する方法

ページ下部に「トップへ戻る」ボタンを表示する機能で、フェード時間とスクロール速度を一箇所で調整可能なバージョンです。

1 functions.php にコードを追加


// -------------------------------------------------------------
// トップへ戻るボタン(フェード+スクロール速度、スクロール位置調整版)
// -------------------------------------------------------------
function my_scroll_to_top_button() {
    echo '<button id="scrollTopBtn" aria-label="トップへ戻る">▲</button>';
}
add_action('wp_footer', 'my_scroll_to_top_button');

// スクロール処理用スクリプト
function my_scroll_to_top_script() {
    ?>
    <script>
    document.addEventListener('DOMContentLoaded', function() {

        const fadeDuration = 300;     // フェードイン・アウト時間(ms)
        const scrollDuration = 600;   // スクロール速度(ms)
        const scrollThreshold = 300;  // ボタン表示位置(px)

        const btn = document.getElementById('scrollTopBtn');
        if (!btn) return;

        // 初期状態
        btn.style.opacity = 0;
        btn.style.display = 'block';
        btn.style.transition = 'opacity ' + fadeDuration + 'ms';

        // スクロールで表示・非表示切替
        window.addEventListener('scroll', function() {
            btn.style.opacity = window.scrollY > scrollThreshold ? 1 : 0;
        });

        // ボタンクリックでトップへスクロール
        btn.addEventListener('click', function() {
            const start = window.scrollY;
            const startTime = performance.now();

            function scrollStep(currentTime) {
                const elapsed = currentTime - startTime;
                const progress = Math.min(elapsed / scrollDuration, 1);
                window.scrollTo(0, start * (1 - progress));
                if (progress < 1) requestAnimationFrame(scrollStep);
            }

            requestAnimationFrame(scrollStep);
        });

    });
    </script>
    <?php
}
add_action('wp_footer', 'my_scroll_to_top_script', 100);
    
補足:
- const duration = 500; → スクロール速度を調整できます。
  値を小さく → 速く
  値を大きく → ゆっくり

- const scrollDuration = 600; → トップまで戻るアニメーションの所要時間(ミリ秒)を指定します。
  scrollDuration (600ms)
  スクロールを「上まで移動するアニメーション」にかける時間。
  値を短くすると速く、長くするとゆっくり戻ります。

-const scrollThreshold = 300; → ページを 300px スクロールした時点で「トップへ戻る」ボタンを表示します。
  scrollThreshold (300px)
  画面を下に 300px スクロールしたら、ボタンを表示する。
  ページの冒頭近くではボタンが不要なので、ある程度下がった時だけ表示するための条件。

- requestAnimationFrame を使用して、滑らかなスクロールを実現しています。

2 汎用CSS


/* -----------------------------
 * トップへ戻るボタン(フェード時間とスクロール速度を一箇所で調整可能)
 * ----------------------------- */

/* ボタン本体 */
#scrollTopBtn {
    position: fixed;           /* スクロールしても画面の同じ位置に固定表示 */
    right: 20px;               /* 画面右端から20px内側に配置 */
    bottom: 20px;              /* 画面下端から20px上に配置 */
    background: #333;          /* ボタンの背景色を濃いグレーに設定 */
    color: #fff;               /* 文字色を白に設定 */
    border: none;              /* ボタンの枠線を消す */
    padding: 12px 16px;        /* 上下12px、左右16pxの内側余白を設定 */
    border-radius: 50%;        /* 完全な円形にする */
    font-size: 18px;           /* 文字サイズを18pxに設定 */
    cursor: pointer;           /* ホバー時に手のカーソル表示 */
    z-index: 9999;             /* 前面に表示 */
    opacity: 0;                /* 初期状態は透明 */
    transition: opacity 0.3s;  /* フェードイン/アウトのアニメーション設定 */
}

/* ホバー時の見た目 */
#scrollTopBtn:hover {
    opacity: 0.8;              /* ホバー時に少し透けて押せる感を演出 */
}
    

3 ポイント

  • fadeDuration:フェードイン・アウトにかかる時間(ms)
  • scrollDuration:トップまでスクロールする時間(ms)
  • scrollThreshold:ボタンが表示されるスクロール位置(px)
  • これらの値を変更するだけでデザインや動作を簡単にカスタマイズ可能

4 まとめ

このコードを追加すると、ユーザーのスクロールに応じて滑らかにフェードイン・フェードアウトする「トップへ戻るボタン」が表示され、
スクロール速度や表示タイミングも一目で調整できます。
管理のしやすさ・ユーザー体験の向上に最適です。