在本教學中,我們將逐步使用 HTML、CSS 和 JavaScript 建立具有流暢動畫和用戶端驗證的高階互動多步驟表單。此表單提供了增強的用戶體驗,看起來就像直接來自 2025 年的東西!
現場示範:https://codepen.io/HanGPIIIErr/pen/ZYzbrqW
目錄
1.簡介
多步驟表單是將冗長的表單分解為可管理的部分,是增強使用者體驗的絕佳方法。在本教程中,我們將建立一個五步驟表單,其中包括:
我們將在步驟之間添加流暢的動畫並驗證使用者輸入以確保資料完整性。
先決條件
對 HTML、CSS 和 JavaScript 的基本了解
熟悉 JavaScript 中的表單元素與事件處理
專案結構
我們將有三個主要文件:
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
感謝您對我們繼續發展《角鬥士之戰》的堅定支持。您的回饋、想法和熱情是我們進步的動力。
讓冒險繼續下去吧,角鬥士們! ?✨
如果您有任何疑問或建議,請在下方留言!
以上是使用動畫建立高級多步驟表單的詳細內容。更多資訊請關注PHP中文網其他相關文章!