Heim > Web-Frontend > js-Tutorial > Erstellen eines Premium-Mehrschrittformulars mit Animationen

Erstellen eines Premium-Mehrschrittformulars mit Animationen

Susan Sarandon
Freigeben: 2024-12-05 22:21:10
Original
195 Leute haben es durchsucht

Building a Premium Multi-Step Form with Animations

In diesem Tutorial führen wir Sie durch die Erstellung eines erstklassigen, interaktiven mehrstufigen Formulars mit reibungslosen Animationen und clientseitiger Validierung mithilfe von HTML, CSS und JavaScript. Dieses Formular bietet ein verbessertes Benutzererlebnis und sieht aus wie etwas direkt aus dem Jahr 2025!

Live-Demo: https://codepen.io/HanGPIIIErr/pen/ZYzbrqW

Inhaltsverzeichnis

  1. Einführung
  2. Voraussetzungen
  3. Projektstruktur
  4. HTML-Markup
  5. Styling mit CSS
  6. Interaktivität mit JavaScript hinzufügen
  7. Fazit

1.Einführung

Mehrstufige Formulare sind eine hervorragende Möglichkeit, die Benutzererfahrung zu verbessern, indem lange Formulare in überschaubare Abschnitte unterteilt werden. In diesem Tutorial erstellen wir ein fünfstufiges Formular, das Folgendes umfasst:

  • Persönliche Daten
  • Einstellungen
  • Bild-Upload
  • Kommentare
  • Zusammenfassung und Einreichung

Wir fügen flüssige Animationen zwischen den Schritten hinzu und validieren Benutzereingaben, um die Datenintegrität sicherzustellen.

Voraussetzungen

Grundkenntnisse von HTML, CSS und JavaScript
Vertrautheit mit Formularelementen und Ereignisbehandlung in JavaScript

Projektstruktur

Wir werden drei Hauptdateien haben:

index.html – Die HTML-Struktur
style.css – Das Styling für unser Formular
script.js – Das JavaScript zur Verarbeitung von Formularinteraktionen
Beginnen wir mit der Einrichtung unserer HTML-Datei.

<!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);
    }
}
Nach dem Login kopieren

Erklärung

  • Hintergrundverlauf: Ein sanfter Verlauf sorgt für ein modernes Gefühl.
  • Formularstil: Wir verwenden Hintergrundfilter für einen Glasmorphismus-Effekt.
  • Übergänge und Animationen: Sanfte Übergänge und Keyframe-Animationen verbessern die Interaktivität.
  • Button-Effekte: Hover-Effekte mit leichter Bewegung und Schatten für Tiefe.
  • Interaktivität mit JavaScript hinzufügen

Machen wir unser Formular funktionsfähig.

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');
        }
    });
});
Nach dem Login kopieren

Erklärung

  • Ereignis-Listener: Für die Schaltflächen „Weiter“ und „Zurück“ zum Navigieren zwischen den Schritten.
  • Validierung: validateStep() stellt sicher, dass erforderliche Felder ausgefüllt sind.
  • Zusammenfassungsanzeige: displaySummary() stellt die eingegebenen Daten zusammen, damit der Benutzer sie überprüfen kann.
  • Formularübermittlung: Bei der Übermittlung wird das Formular zurückgesetzt und kehrt zum ersten Schritt zurück.

? Fazit: Die Zukunft des Gladiatorenkampfes gestalten

Die neuesten Verbesserungen von Gladiators Battle stellen einen bedeutenden Schritt hin zu einem nahtlosen und fesselnden Erlebnis für alle Spieler dar. Mit einem erweiterten Tutorialsystem, modularen Komponenten, einem florierenden Gilden-Ökosystem und optimierten Minispielen entwickelt sich das Spiel zum ultimativen Gladiatoren-Rollenspiel.

Ob Sie ein Neuling sind, der die Arena zum ersten Mal erkundet, oder ein erfahrener Krieger, der das Schlachtfeld dominiert, diese Updates stellen sicher, dass jeder sein eigenes episches Erbe schmieden kann.

? Mach mit bei der Reise!

Wir suchen aktiv nach Feedback von Spielern und Entwicklern. Tauchen Sie ein in Gladiators Battle und teilen Sie uns Ihre Gedanken mit.

? Website: https://gladiatorsbattle.com
?️ Unterstützen Sie uns auf Kickstarter: https://www.kickstarter.com/projects/gladiatorsbattle/gladiators-battle-forge-your-legend-in-the-ultimate-arena
? Folgen Sie uns auf X (ehemals Twitter): https://x.com/GladiatorsBT
? Verbinden Sie sich auf LinkedIn: https://www.linkedin.com/in/pierre-romain-lopez
? Treten Sie der Community auf Discord bei: https://discord.gg/YBNF7KjGwx

Vielen Dank für Ihre unerschütterliche Unterstützung bei der Weiterentwicklung von Gladiators Battle. Ihr Feedback, Ihre Ideen und Ihre Begeisterung sind die treibenden Kräfte hinter unserem Fortschritt.

Lasst das Abenteuer weitergehen – Ave, Gladiatoren! ?✨

Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte unten einen Kommentar!

Das obige ist der detaillierte Inhalt vonErstellen eines Premium-Mehrschrittformulars mit Animationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage