フェードイン・フェードアウトする読み込み中アニメーションを作る方法
Webページでデータの取得や画面の切り替えなどに時間がかかる場合は、処理中であることを伝えるローディング表示があると、ユーザーが現在の状態を把握しやすくなります。今回は、円形のローディングアニメーションをフェードインで表示し、一定時間が経過するとフェードアウトで非表示にするサンプルを作成します。
基本となる円形のローダーはCSSのborderと@keyframesを使って回転させます。さらにopacityとtransitionを組み合わせることで、突然表示・非表示を切り替えるのではなく、透明度を変化させながら滑らかに切り替えます。「読み込み開始」ボタンをクリックするとJavaScriptで表示用のクラスを追加し、約2秒後にそのクラスを削除します。
実際のWebサイトでは、データの読み込みや通信処理を開始したタイミングでローディングを表示し、処理が完了したタイミングで非表示にする使い方ができます。サンプルでは動作を繰り返し確認できるようにボタンを配置しています。画面幅640px以下では内側余白も調整し、スマートフォンでも表示しやすいようにしています。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
しばらくお待ちください。
「読み込み開始」をクリックするとローディングがフェードインし、約2秒後にフェードアウトします。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コードをUTF-8へ設定 -->
<meta charset="UTF-8">
<!-- スマートフォンやタブレットの画面幅へ対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ブラウザのタブへ表示するページタイトル -->
<title>フェードする読み込み中アニメーション</title>
<!-- ローディングのデザインを設定するCSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ローディング全体 -->
<div class="fade-loading-animation_wrap">
<!-- 回転する円形ローダー -->
<div
class="fade-loading-animation_loader"
id="fade-loading-animation-loader">
</div>
<!-- ローディングのタイトル -->
<div class="fade-loading-animation_title">
読み込み中
</div>
<!-- ローディングの説明文 -->
<p class="fade-loading-animation_text">
しばらくお待ちください。
</p>
<!-- ローディングを開始するボタン -->
<button
class="fade-loading-animation_button"
id="fade-loading-animation-button"
type="button">
読み込み開始
</button>
</div>
<!-- ローディングの表示を制御するJavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。基本となる円形のローディングアニメーションをCSSで回転させ、JavaScriptで表示用のクラスを追加・削除することでフェードインとフェードアウトを切り替えます。「読み込み開始」をクリックするとローダーが表示され、約2秒後に自動で非表示になります。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはローディング表示、タイトル、説明文、「読み込み開始」ボタンを構成するファイルです。style.cssとscript.jsを読み込み、デザインと表示処理を適用します。style.cssは円形ローダーの回転、フェードイン・フェードアウト、全体のレイアウト、ボタン、レスポンシブ表示を設定します。script.jsはボタンをクリックしたときにis-activeクラスを追加し、2000ミリ秒後に削除する処理を行います。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置し、sample/index.htmlをブラウザで開いてください。「読み込み開始」をクリックするとis-activeクラスが追加され、円形ローダーがフェードインします。その後、約2秒が経過するとクラスが削除され、フェードアウトします。実際のWebサイトで使用する場合は、データ取得や通信処理の開始時にクラスを追加し、処理完了時にクラスを削除する形へ置き換えることができます。
カスタマイズできる内容
style.cssではローダーの大きさ、線の太さ、色、回転速度、フェード時間、全体の横幅や余白、ボタンのデザインなどを変更できます。script.jsの2000を変更すると、サンプルでローダーを表示しておく時間を調整できます。
数値調整
max-width:420px;はローディング全体の最大横幅です。値を大きくすると表示領域が広がり、小さくするとコンパクトになります。
padding:48px 24px;はローディング全体の内側余白です。48pxは上下、24pxは左右の余白を調整します。
border-radius:18px;は全体の角丸です。値を大きくすると丸みが強くなります。
width:64px;とheight:64px;は円形ローダーの大きさです。両方を同じ値で大きくすると円が大きくなります。
border:6px solid #dbeafe;の6pxはローダーの線の太さです。値を大きくすると線が太くなります。
margin:0 auto 20px;の20pxはローダーとタイトルの間隔です。値を大きくすると間隔が広がります。
animation:fade-loading-animation_spin 1s linear infinite;の1sは1回転にかかる時間です。値を小さくすると速く回転し、大きくするとゆっくり回転します。
transition:opacity .6s ease,visibility .6s ease;の0.6秒はフェードの切り替え時間です。値を大きくするとゆっくり変化し、小さくすると素早く変化します。
font-size:22px;はタイトルの文字サイズです。値を大きくすると文字が大きくなります。
margin-top:24px;は説明文と「読み込み開始」ボタンとの間隔です。値を大きくすると間隔が広がります。
padding:12px 24px;はボタンの内側余白です。12pxは上下、24pxは左右の大きさを調整します。
border-radius:8px;はボタンの角丸です。値を大きくすると丸みが強くなります。
font-size:16px;はボタンの文字サイズです。値を大きくすると文字が大きくなります。
script.jsの2000はローダーを表示しておく時間です。2000ミリ秒は2秒を表し、値を大きくするとフェードアウトまでの時間が長くなり、小さくすると短くなります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。ローディング全体にはwidth:100%とmax-width:420pxを指定しているため、画面幅に合わせて縮小します。画面幅640px以下ではページ全体の余白をpadding:24px 12px;へ変更し、ローディング全体の内側余白をpadding:32px 18px;へ縮小することで、スマートフォンでも画面内へ収まりやすくしています。
コメント