フォーム送信中に読み込み中アニメーションを表示する方法【HTML/CSS/JavaScript・サンプルコード付き】
ローディング
フォーム送信中に読み込み中アニメーションを表示する方法
フォーム送信中に読み込み中アニメーションを表示する方法を紹介します。お問い合わせフォームやログインフォーム、会員登録フォームなどでは、送信ボタンを押してから処理が完了するまでに時間がかかる場合があります。その間に読み込み中アニメーションを表示することで、送信処理が実行中であることをユーザーへ分かりやすく伝えられます。
このサンプルでは、HTML・CSS・JavaScriptを使ってフォーム送信中に読み込み中アニメーションを表示する方法を紹介します。フォームの送信開始と同時にアニメーションを表示し、送信ボタンの連続クリックを防ぎながら処理中であることを視覚的に案内できます。特別なライブラリは使用せず、既存のフォームへ導入しやすいシンプルな構成になっています。
お問い合わせフォームや検索フォーム、ログインフォーム、会員登録フォームなど、送信処理に時間がかかるフォームで活用できます。送信中であることをユーザーへ分かりやすく伝えたい場合や、二重送信を防止したい場合にも便利なサンプルです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
フォームの submit イベントで読み込み中表示を開始し、送信中はボタンを無効化します。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<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>
<!-- フォーム -->
<form class="form-submit-loading-animation_form" id="submitForm">
<!-- 名前 -->
<label class="form-submit-loading-animation_label" for="name">お名前</label>
<input class="form-submit-loading-animation_input" id="name" type="text" value="山田 太郎">
<!-- お問い合わせ内容 -->
<label class="form-submit-loading-animation_label" for="message">お問い合わせ内容</label>
<textarea class="form-submit-loading-animation_textarea" id="message">サンプルの送信内容です。</textarea>
<!-- 送信ボタン -->
<button class="form-submit-loading-animation_button" id="submitButton" type="submit">
<span class="form-submit-loading-animation_loader"></span>
<span id="submitButtonText">送信する</span>
</button>
</form>
<!-- 送信状態のメッセージ -->
<div class="form-submit-loading-animation_message" id="submitMessage">
送信ボタンを押すと、送信中だけ読み込み中アニメーションを表示します。
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0;
min-height:100vh;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
padding:20px;
background:#f8fafc;
font-family:sans-serif;
}
/* 幅計算を統一 */
*{
box-sizing:border-box;
}
/* フォーム */
.form-submit-loading-animation_form{
width:420px;
max-width:100%;
display:grid;
gap:14px;
padding:28px 20px;
border:1px solid #d1d5db;
border-radius:20px;
background:#ffffff;
}
/* ラベル */
.form-submit-loading-animation_label{
color:#111827;
font-size:14px;
font-weight:700;
}
/* 入力欄 */
.form-submit-loading-animation_input,
.form-submit-loading-animation_textarea{
width:100%;
padding:12px;
border:1px solid #d1d5db;
border-radius:10px;
font-size:14px;
}
/* テキストエリア */
.form-submit-loading-animation_textarea{
min-height:100px;
resize:vertical;
}
/* 送信ボタン */
.form-submit-loading-animation_button{
display:inline-flex;
align-items:center;
justify-content:center;
gap:10px;
padding:13px 18px;
border:none;
border-radius:10px;
background:#2563eb;
color:#ffffff;
font-size:15px;
font-weight:700;
cursor:pointer;
}
/* 送信中のボタン */
.form-submit-loading-animation_button:disabled{
opacity:.7;
cursor:not-allowed;
}
/* 読み込み中アニメーション */
.form-submit-loading-animation_loader{
display:none;
width:18px;
height:18px;
border:3px solid rgba(255,255,255,.45);
border-top-color:#ffffff;
border-radius:50%;
animation:form-submit-loading-animation_spin 1s linear infinite;
}
/* 送信中だけ読み込み中アニメーションを表示 */
.form-submit-loading-animation_button.is-loading .form-submit-loading-animation_loader{
display:inline-block;
}
/* 送信状態のメッセージ */
.form-submit-loading-animation_message{
width:420px;
max-width:100%;
margin:16px 0 0;
padding:12px;
border-radius:10px;
background:#ffffff;
color:#374151;
line-height:1.7;
text-align:center;
}
/* 回転アニメーション */
@keyframes form-submit-loading-animation_spin{
from{
transform:rotate(0deg);
}
to{
transform:rotate(360deg);
}
}
// フォームを取得
const submitForm = document.getElementById("submitForm");
// 送信ボタンを取得
const submitButton = document.getElementById("submitButton");
// 送信ボタンの文字を取得
const submitButtonText = document.getElementById("submitButtonText");
// 送信状態のメッセージを取得
const submitMessage = document.getElementById("submitMessage");
// フォーム送信時の処理
submitForm.addEventListener("submit", function(event){
// デモ用に通常送信を止める
event.preventDefault();
// 読み込み中アニメーションを表示
submitButton.classList.add("is-loading");
// 二重送信を防ぐ
submitButton.disabled = true;
// ボタン文字を送信中へ変更
submitButtonText.textContent = "送信中...";
// メッセージを変更
submitMessage.textContent = "フォームを送信しています。";
// 送信処理の待ち時間を再現
setTimeout(function(){
// 読み込み中アニメーションを非表示
submitButton.classList.remove("is-loading");
// ボタンを再度押せる状態に戻す
submitButton.disabled = false;
// ボタン文字を元に戻す
submitButtonText.textContent = "送信する";
// 完了メッセージを表示
submitMessage.textContent = "送信が完了しました。";
}, 1800);
});
ファイル構成と設置方法
このサンプルは、HTML・CSS・JavaScriptの3ファイルで構成されています。HTMLにフォームや送信ボタンを配置し、CSSでフォームのデザインや読み込み中アニメーションの見た目を設定します。JavaScriptではフォームの送信開始を検知し、読み込み中アニメーションの表示や送信ボタンの無効化、送信完了後の表示切り替えを行います。
sample/
├── index.html
├── style.css
└── script.js
3つのファイルを同じフォルダへ配置し、ブラウザで index.html を開くと動作を確認できます。送信ボタンを押すと読み込み中アニメーションが表示され、ボタンが一時的に無効化されます。実際のフォームへ組み込む場合は、デモ用の event.preventDefault() を削除し、送信完了時の処理へ合わせて読み込み中アニメーションを終了してください。ボタンの色やサイズ、アニメーションの回転速度はCSSから自由に変更できます。
フォーム送信中に読み込み中アニメーションを表示する方法【HTML/CSS/JavaScript・サンプルコード付き】
コメント