【JavaScript】フォーム送信時にローディングアニメーションを表示する方法

ウェブサイトやウェブアプリケーションでフォームを使用する際、ユーザーがデータを送信するとサーバーで処理が行われます。この処理が行われている間、ユーザーに何が起こっているのかを知らせるためにローディングアニメーションを表示することが一般的です。この記事では、JavaScriptを使用してフォーム送信時にローディングアニメーションを表示する方法を詳しく解説します。

HTMLの準備

まずは基本的なHTMLの構造を作成します。以下のコードスニペットは、シンプルなフォームとローディングアニメーションのHTML要素を示しています。

<!DOCTYPE html>
<html>
<head>
  <title>Form with Loading Animation</title>
</head>
<body>

  <form id="myForm">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Submit</button>
  </form>

  <div id="loading" style="display:none;">
    <img src="loading.gif" alt="Loading...">
  </div>

</body>
</html>

この例では、id=”myForm”とid=”loading”をそれぞれフォームとローディングアニメーションの要素に設定しています。これにより、JavaScriptで簡単にこれらの要素を操作できます。

CSSでスタイリング

次に、ローディングアニメーションの見た目をCSSで設定します。以下のCSSコードは、ローディングアニメーションに適用する基本的なスタイルです。

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

このスタイルでは、ローディングアニメーションが全画面に表示され、半透明の黒背景が追加されます。z-index: 9999;によって、他の要素よりも前面に表示されます。

JavaScriptの実装

最後に、JavaScriptを使ってローディングアニメーションを制御します。以下のコードスニペットはその一例です。

document.addEventListener("DOMContentLoaded", function() {
  const form = document.getElementById("myForm");
  const loading = document.getElementById("loading");

  form.addEventListener("submit", function(event) {
    event.preventDefault(); // フォームのデフォルトの送信を防ぐ

    // ローディングアニメーションを表示
    loading.style.display = "block";

    // ここで何らかの非同期処理(例:AJAX通信)を行う
    setTimeout(function() {
      // ローディングアニメーションを非表示にする
      loading.style.display = "none";
      // 処理が完了したら、フォームを実際に送信する(オプション)
      // form.submit();
    }, 2000); // この例では2秒後にローディングアニメーションを非表示にする
  });
});

このコードでは、フォームが送信されたときにsubmitイベントが発火し、ローディングアニメーションが表示されます。非同期処理が完了したら、ローディングアニメーションを非表示にします。

まとめ

この記事では、JavaScriptを使用してフォーム送信時にローディングアニメーションを表示する方法を解説しました。HTML, CSS, JavaScriptの三つの要素を組み合わせることで、ユーザーにフレンドリーなインターフェースを提供することができます。この基本的な例を参考に、自分のプロジェクトに合わせてカスタマイズしてみてください。