Rumah >hujung hadapan web >tutorial js >Membina Borang Berbilang Langkah Premium dengan Animasi
Dalam tutorial ini, kami akan menelusuri pembuatan borang berbilang langkah yang premium dan interaktif dengan animasi yang lancar dan pengesahan pihak klien menggunakan HTML, CSS dan JavaScript. Borang ini menyediakan pengalaman pengguna yang dipertingkatkan dan kelihatan seperti sesuatu yang langsung dari tahun 2025!
Demo Langsung: https://codepen.io/HanGPIIIErr/pen/ZYzbrqW
Jadual Kandungan
1.Pengenalan
Borang berbilang langkah ialah cara terbaik untuk meningkatkan pengalaman pengguna dengan memecahkan borang yang panjang kepada bahagian yang boleh diurus. Dalam tutorial ini, kami akan mencipta borang lima langkah yang merangkumi:
Kami akan menambah animasi lancar antara langkah dan mengesahkan input pengguna untuk memastikan integriti data.
Prasyarat
Pemahaman asas HTML, CSS dan JavaScript
Kebiasaan dengan elemen borang dan pengendalian acara dalam JavaScript
Struktur Projek
Kami akan mempunyai tiga fail utama:
index.html — Struktur HTML
style.css — Penggayaan untuk borang kami
script.js — JavaScript untuk mengendalikan interaksi borang
Mari mulakan dengan menyediakan fail HTML kami.
<!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); } }
Penjelasan
Mari jadikan borang kami berfungsi.
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'); } }); });
Penjelasan
? Kesimpulan: Menempa Masa Depan Pertempuran Gladiator
Peningkatan terbaharu kepada Gladiators Battle menandakan satu lonjakan yang ketara ke arah menyediakan pengalaman yang lancar dan menawan untuk semua pemain. Dengan sistem tutorial yang diperkaya, komponen modular, ekosistem persatuan yang berkembang maju dan permainan mini yang dioptimumkan, permainan ini berkembang menjadi RPG gladiator yang muktamad.
Sama ada anda pendatang baru menerokai arena buat kali pertama atau pahlawan berpengalaman yang menguasai medan perang, kemas kini ini memastikan semua orang boleh menempa warisan epik mereka sendiri.
? Sertai Perjalanan!
Kami sedang giat mencari maklum balas daripada pemain dan pembangun. Selami Pertempuran Gladiator dan kongsi pendapat anda dengan kami.
? Tapak web: https://gladiatorsbattle.com
?️ Sokong Kami di Kickstarter: https://www.kickstarter.com/projects/gladiatorsbattle/gladiators-battle-forge-your-legend-in-the-ultimate-arena
? Ikuti Kami di X (dahulunya Twitter): https://x.com/GladiatorsBT
? Sambung di LinkedIn: https://www.linkedin.com/in/pierre-romain-lopez
? Sertai Komuniti di Discord: https://discord.gg/YBNF7KjGwx
Terima kasih atas sokongan anda yang tidak berbelah bahagi sambil kami terus membangunkan Gladiators Battle. Maklum balas, idea dan semangat anda adalah penggerak di sebalik kemajuan kami.
Biar pengembaraan diteruskan—Ave, Gladiator! ?✨
Jika anda mempunyai sebarang soalan atau cadangan, sila tinggalkan komen di bawah!
Atas ialah kandungan terperinci Membina Borang Berbilang Langkah Premium dengan Animasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!