ホームページ >ウェブフロントエンド >jsチュートリアル >アニメーションを使用したプレミアムなマルチステップ フォームの構築
このチュートリアルでは、HTML、CSS、JavaScript を使用して、スムーズなアニメーションとクライアント側の検証を備えたプレミアムでインタラクティブなマルチステップ フォームを作成する方法を説明します。このフォームは強化されたユーザー エクスペリエンスを提供し、まさに 2025 年のもののように見えます!
ライブデモ: https://codepen.io/HanGPIIIErr/pen/ZYzbrqW
目次
1.はじめに
マルチステップフォームは、長いフォームを管理しやすいセクションに分割することで、ユーザーエクスペリエンスを向上させる優れた方法です。このチュートリアルでは、以下を含む 5 ステップのフォームを作成します。
ステップ間にスムーズなアニメーションを追加し、ユーザー入力を検証してデータの整合性を確保します。
前提条件
HTML、CSS、JavaScript の基本的な理解
JavaScript のフォーム要素とイベント処理に精通している
プロジェクトの構造
3 つの主要なファイルがあります:
index.html — HTML 構造
style.css — フォームのスタイル
script.js — フォームの操作を処理する JavaScript
まずは HTML ファイルを設定しましょう。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Premium Multi-Step Form</title> <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,600&display=swap" rel="stylesheet"> <link rel="stylesheet" href="style.css"> </head> <body> <form> <p>Explanation</p> <ul> <li>Form Steps: Each step is wrapped in a div with the class form-step.</li> <li>Active Class: The first step has the class active to display it initially.</li> <li>Navigation Buttons: Each step (except the first and last) has "Previous" and "Next" buttons.</li> <li>Summary Section: The last step displays a summary of the entered information.</li> </ul> <p>Styling with CSS</p> <p>Now, let's style our form to give it that premium feel.<br> </p> <pre class="brush:php;toolbar:false">/* style.css */ body { font-family: 'Poppins', sans-serif; background: linear-gradient(135deg, #1abc9c, #16a085); display: flex; justify-content: center; align-items: center; height: 100vh; overflow: hidden; } form { width: 90%; max-width: 600px; background: rgba(255, 255, 255, 0.95); padding: 3em; border-radius: 20px; box-shadow: 0 15px 25px rgba(0, 0, 0, 0.2); backdrop-filter: blur(10px); position: relative; overflow: hidden; } .form-step { position: absolute; width: 100%; opacity: 0; transform: scale(0.8) translateY(50px); transition: all 0.5s ease; } .form-step.active { opacity: 1; transform: scale(1) translateY(0); position: relative; } .step-header { position: absolute; top: -30px; right: 30px; background: #16a085; color: #fff; padding: 0.5em 1em; border-radius: 30px; font-weight: 600; animation: slideIn 0.5s forwards; } h2 { margin-bottom: 1em; color: #333; font-weight: 600; text-align: center; animation: fadeInDown 0.5s ease-in-out; } label { display: block; margin-top: 1em; color: #555; font-weight: 500; animation: fadeInUp 0.5s ease-in-out; } input[type="text"], input[type="email"], input[type="file"], textarea { width: 100%; padding: 0.75em 1em; margin-top: 0.5em; border: 2px solid #ddd; border-radius: 10px; font-size: 1em; outline: none; transition: border-color 0.3s; animation: fadeInUp 0.5s ease-in-out; } input:focus, textarea:focus { border-color: #1abc9c; } input[type="checkbox"] { margin-right: 0.5em; } .buttons { display: flex; justify-content: space-between; margin-top: 2em; animation: fadeInUp 0.5s ease-in-out; } button { padding: 0.75em 2em; border: none; border-radius: 30px; cursor: pointer; font-size: 1em; font-weight: 600; transition: background 0.3s, transform 0.3s, box-shadow 0.3s; } .next-step, .prev-step { background: #1abc9c; color: #fff; } .next-step:hover, .prev-step:hover { background: #16a085; transform: translateY(-3px); box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1); } button[type="submit"] { background: #e74c3c; color: #fff; margin-left: auto; } button[type="submit"]:hover { background: #c0392b; transform: translateY(-3px); box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1); } #summary p { margin: 1em 0; color: #333; font-weight: 500; animation: fadeInUp 0.5s ease-in-out; } /* Animations */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-30px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideIn { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } }
説明
フォームを機能させてみましょう。
document.addEventListener('DOMContentLoaded', function() { const form = document.getElementById('multi-step-form'); const steps = document.querySelectorAll('.form-step'); const nextBtns = document.querySelectorAll('.next-step'); const prevBtns = document.querySelectorAll('.prev-step'); const summary = document.getElementById('summary'); let currentStep = 0; nextBtns.forEach(btn => { btn.addEventListener('click', () => { if (validateStep()) { steps[currentStep].classList.remove('active'); currentStep++; if (currentStep < steps.length) { steps[currentStep].classList.add('active'); } if (currentStep === steps.length - 1) { displaySummary(); } } }); }); prevBtns.forEach(btn => { btn.addEventListener('click', () => { steps[currentStep].classList.remove('active'); currentStep--; steps[currentStep].classList.add('active'); }); }); form.addEventListener('submit', (e) => { e.preventDefault(); alert('Form successfully submitted!'); form.reset(); steps[currentStep].classList.remove('active'); currentStep = 0; steps[currentStep].classList.add('active'); }); function validateStep() { let stepIsValid = true; const currentInputs = steps[currentStep].querySelectorAll('input, textarea'); currentInputs.forEach(input => { if (!input.checkValidity()) { input.reportValidity(); stepIsValid = false; } }); return stepIsValid; } function displaySummary() { const name = document.getElementById('name').value || 'N/A'; const email = document.getElementById('email').value || 'N/A'; const prefs = Array.from(document.querySelectorAll('input[name="pref"]:checked')).map(el => el.value).join(', ') || 'None'; const comments = document.getElementById('comments').value || 'None'; summary.innerHTML = ` <p><strong>Name:</strong> ${name}</p> <p><strong>Email:</strong> ${email}</p> <p><strong>Preferences:</strong> ${prefs}</p> <p><strong>Comments:</strong> ${comments}</p> `; } // Initialize steps steps.forEach((step, index) => { if (index !== currentStep) { step.classList.remove('active'); } else { step.classList.add('active'); } }); });
説明
?結論: 剣闘士の戦いの未来を築く
グラディエーター バトルの最新の機能強化は、すべてのプレイヤーにシームレスで魅力的な体験を提供するという大きな進歩を示しています。充実したチュートリアル システム、モジュール式コンポーネント、繁栄するギルド エコシステム、最適化されたミニゲームにより、このゲームは究極の剣闘士 RPG へと進化しています。
初めてアリーナを探索する新人であっても、戦場を支配する熟練の戦士であっても、これらのアップデートにより誰もが独自の壮大な遺産を築くことができます。
?旅に参加しましょう!
私たちはプレイヤーと開発者の両方からのフィードバックを積極的に求めています。グラディエーター バトルに参加して、ご意見をお聞かせください。
?ウェブサイト: https://gladiatorsbattle.com
?️ Kickstarter でサポートしてください: https://www.kickstarter.com/projects/gladiatorsbattle/gladiators-battle-forge-your-legend-in-the-ultimate-arena
? X (旧 Twitter) でフォローしてください: https://x.com/GladiatorsBT
? LinkedIn で接続: https://www.linkedin.com/in/pierre-romain-lopez
? Discord のコミュニティに参加してください: https://discord.gg/YBNF7KjGwx
Gladiators Battle の開発を継続するための変わらぬご支援に感謝いたします。皆様のフィードバック、アイデア、熱意が私たちの進歩の原動力です。
冒険を続けましょう—アベニュー、剣闘士たち! ?✨
ご質問やご提案がございましたら、以下にコメントを残してください。
以上がアニメーションを使用したプレミアムなマルチステップ フォームの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。