URLをコピーしました!
スキルアップを始める!

【JavaScript】画面遷移中にぐるぐるローディングアニメーションを表示したい

JavaScript(ジャバスクリプト)
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

グルグル回るローディングアニメーション

リンク先をクリックした際に、グルグル回るローディングアニメーションを表示してみます。

スクリプト参考例

特定のリンクをクリックしたときにローディングを表示するようにしたい場合、JavaScriptでそのリンクに対してクリックイベントを追加し、クリックされたときにローディングを表示するように処理を追加できます。

以下はスクリプト参考例です。

HTML:

<a href="#section1" class="loading-link">セクション1へ移動</a>
<a href="#section2" class="loading-link">セクション2へ移動</a>

JavaScript:

    document.addEventListener("DOMContentLoaded", function () {
        // ローディングを表示するリンクに対してクリックイベントを追加
        var links = document.querySelectorAll('.loading-link');
        links.forEach(function (link) {
            link.addEventListener('click', function (event) {
                event.preventDefault(); // リンクのデフォルトの動作をキャンセル
                showLoading(); // ローディング表示

                // 画面遷移処理(例として2秒後に遷移すると仮定)
                setTimeout(function () {
                    // 画面遷移後にローディングとオーバーレイ非表示
                    document.getElementById("loading").style.display = "none";
                    document.getElementById("overlay").style.display = "none";
                    window.location.href = link.href; // クリックしたリンク先に遷移
                }, 2000); // 2秒後に画面遷移
            });
        });

        function showLoading() {
            // オーバーレイ表示
            document.getElementById("overlay").style.display = "block";
            // ローディング表示
            document.getElementById("loading").style.display = "block";
        }
    });

このスクリプトでは、ローディングを表示したいリンクに loading-link クラスを追加しています。それにより、特定のリンクのみがクリックされたときにローディングが発生します。

あとは、リンクをクリックした際のCSSを加えていきます。

グローバルスタイル

body {
    margin: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    overflow: hidden;
}

body: <body> 要素に適用されるスタイルです。

margin: 0;: ボディのデフォルトのマージンを削除します。

display: flex;: フレックスコンテナとしてボディを使います。

justify-content: center;: コンテンツを水平方向に中央揃えにします。

align-items: center;: コンテンツを垂直方向に中央揃えにします。

height: 100vh;: ボディの高さをビューポートの100%に設定します。

overflow: hidden;: ボディからはみ出るコンテンツを非表示にします。

オーバーレイのスタイル

#overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.5);
    z-index: 9998;
    display: none;
}

#overlay: ID が overlay の要素に適用されるスタイルです。

position: fixed;: オーバーレイの位置を固定します。

top: 0; left: 0;: オーバーレイを画面の左上に配置します。

width: 100%; height: 100%;: 画面全体を覆います。

background-color: rgba(0, 0, 0, 0.5);: 半透明の黒い背景色を設定します。

z-index: 9998;: 他の要素よりも前面に配置します。

display: none;: 最初はオーバーレイを非表示にします。

ローディングのスタイル

#loading {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    z-index: 9999;
    text-align: center;
    display: none;
}

#loading: ID が loading の要素に適用されるスタイルです。

position: fixed;: ローディングコンテナの位置を固定します。

top: 50%; left: 50%;: 画面の中央に配置します。

transform: translate(-50%, -50%);: ローディングコンテナを正確に中央に配置します。

z-index: 9999;: オーバーレイよりも前面に配置します。

text-align: center;: テキストコンテンツを水平方向に中央揃えにします。

display: none;: 最初はローディングコンテナを非表示にします。

ローダーのスタイル

#loading .loader {
    border: 8px solid #f3f3f3;
    border-top: 8px solid #3498db;
    border-radius: 50%;
    width: 50px;
    height: 50px;
    animation: spin 1s linear infinite;
    background-color: transparent;
    padding: 20px;
    display: inline-block;
}

#loading .loader: ローディングコンテナ内のローダーに適用されるスタイルです。

border: ボーダーのスタイルを使って円形のローダーを作成します。

width: 50px; height: 50px;: ローダーのサイズを設定します。

animation: spin 1s linear infinite;: 回転アニメーションを適用します。

background-color: transparent;: ローダーの背景を透明にします。

padding: 20px;: ローダーの周りにスペースを設けます。

display: inline-block;: ローダーをインラインブロックとして配置します。

キーフレームアニメーション

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

@keyframes spin: spin という名前のキーフレームアニメーションを定義します。

0% { transform: rotate(0deg); }: 初期状態(回転なし)。

100% { transform: rotate(360deg); }: 最終状態(完全な回転)。

まとめ

このCSSは、中央に配置されたローディングスピナーと画面全体を覆うオーバーレイを作成するためのものです。ローダーは最初は非表示で、JavaScriptによってトリガーされると表示されます。

オーバーレイは何かが進行中であることを示す半透明の背景を提供します。

Kindle Unlimited 会員は無料で購読できます
購読はこちら
Kindle Unlimited 会員は無料で購読できます
購読はこちら