ローディングアニメーションの作り方|HTML/CSS/JSの実装コードと注意点

ローディングアニメーションとは、ページやデータの読み込み中に一時的に表示されるアニメーションのことです。「処理が止まっていない」ことを視覚的に伝えられるため、待ち時間のストレスを軽減し、離脱を防ぐ効果があります。実装は「①ローディング画面を全面に重ねる → ②CSSでアニメーションさせる → ③JavaScriptで読み込み完了時に消す」の3ステップで完成します。本記事では、コピーして使えるコード例から、種類の選び方、UXを損なわないための注意点までを解説します。

ローディングアニメーションとは?導入する3つのメリット

monitor showing Java programming
Photo by Ilya Pavlov on Unsplash

ローディングアニメーションの役割は、待ち時間を「不安な時間」から「進行中だと分かる時間」に変えることです。主なメリットは次の3点です。

  • 読み込み状況の可視化:ページが固まったわけではないとユーザーに伝わり、離脱を防げる
  • 待ち時間のストレス軽減:動きがあることで体感的な待ち時間が短くなる
  • 遅延の自然な隠蔽:画像やデータ取得の遅れを、演出としてカバーできる

特にファーストビューに大きな画像や動画を使うサイトでは、読み込み途中のガタついた表示を見せずに済むため、ブランドイメージを守るうえでも効果的です。

ローディングアニメーションの主な種類

まずはサイトの雰囲気に合う型を選びます。代表的なパターンは次のとおりです。

  • スピナー(回転タイプ):円がくるくる回る定番。どんなサイトにも馴染む
  • プログレスバー:進捗が数値や長さで分かるため、待ち時間が長い処理に向く
  • カウントアップ(数字表示):0→100%と進む演出。ブランドサイトで人気
  • ドット・パルス:点が波打つように動く軽量なタイプ
  • スケルトンローダー:コンテンツの枠だけ先に表示する方式。近年のWebアプリで主流
  • SVG・ロゴアニメーション:ロゴを動かす演出でブランド訴求と両立できる

実装手順3ステップとコード例

lines of HTML codes
Photo by Florian Olivo on Unsplash

基本の考え方は「読み込み中はローディング画面を全画面に重ねておき、読み込みが終わったらJavaScriptでクラスを付けて消す」です。順に見ていきましょう。

STEP1:HTMLでローディング画面を用意する

<div id="loading"><div class="spinner"></div></div><div class="contents"><!-- ページ本体 --></div>

STEP2:CSSで全面に重ねてアニメーションさせる

ポイントはposition: fixedで画面全体を覆うことと、@keyframesで動きを定義することです。

#loading {  position: fixed;  inset: 0;  z-index: 9999;  display: flex;  align-items: center;  justify-content: center;  background: #fff;  transition: all 1s;}.spinner {  width: 50px;  height: 50px;  border: 5px solid #eee;  border-top-color: #333;  border-radius: 50%;  animation: spin 1s linear infinite;}@keyframes spin {  to { transform: rotate(360deg); }}#loading.loaded {  opacity: 0;  visibility: hidden;}

STEP3:JavaScriptで読み込み完了時に非表示にする

アニメーション自体はCSSだけで作れますが、「読み込みが終わった」ことを検知するには、次のような短いJavaScriptが必要です。

window.addEventListener("load", function () {  document.getElementById("loading").classList.add("loaded");});

window.onloadは画像を含むすべての読み込み完了後に発火します。CSS側でtransitionを指定してあるため、ローディング画面はふわりとフェードアウトします。

ゼロから作らずライブラリ・ジェネレーターを使う手も

デザインにこだわらない場合は、既製のCSSスピナーを使うほうが早く確実です。よく使われるものに、Single Element CSS Spinners、SpinKit、Epic Spinners、進捗バーを自動表示するPACEなどがあります。また、スピナーやドット、波形などのCSSコードを、色・サイズ・速度を調整しながら生成できるジェネレーターも公開されており、出力されたHTMLとCSSを貼り付けるだけで導入できます。

UXを損なわないための注意点

もっとも大切なのは「そもそも読み込みが速いサイトを作ること」です。ローディングアニメーションは遅さを隠す演出であり、遅さの解決策ではありません。次の点に注意しましょう。

  • 凝りすぎない:複雑なアニメーションや大きなファイルは、かえって表示速度を下げてUXを悪化させる
  • 長く見せない:演出のためだけに表示時間を引き延ばすと、ストレスの原因になる
  • モバイルを確認する:スマホは回線・端末性能の影響を受けやすいため実機でチェックする
  • 失敗時に備える:エラーで読み込みが終わらないと、ローディング画面が消えず操作不能になる
  • アクセシビリティ:動きの激しい演出は、必要に応じてprefers-reduced-motionで抑制する

よくある質問(FAQ)

Q. CSSだけでローディングアニメーションは作れますか?
A. アニメーションの動き自体はCSSだけで作れます。ただし「読み込みが完了したかどうか」を判定して非表示にする部分には、数行のJavaScriptが必要です。

Q. ローディング画面が消えないのはなぜですか?
A. JavaScriptがエラーで止まっているか、クラス名やIDがCSSと一致していない可能性が高いです。ブラウザの開発者ツールでエラーを確認してください。

Q. 表示時間はどのくらいが適切ですか?
A. 読み込みが終わり次第すぐ消すのが基本です。演出として最低表示時間を設ける場合でも、1〜2秒程度に抑えるとストレスになりにくくなります。

Q. どんなサイトに導入すべきですか?
A. 大きな画像や動画を使うブランドサイト、データ取得に時間がかかるWebアプリなど、待ち時間が発生しやすいサイトに向いています。軽量なページでは、無理に導入しないほうがよい場合もあります。

最新情報をチェックしよう!