Maison > interface Web > js tutoriel > Création d'un formulaire premium en plusieurs étapes avec des animations

Création d'un formulaire premium en plusieurs étapes avec des animations

Susan Sarandon
Libérer: 2024-12-05 22:21:10
original
195 Les gens l'ont consulté

Building a Premium Multi-Step Form with Animations

Dans ce didacticiel, nous expliquerons la création d'un formulaire premium et interactif en plusieurs étapes avec des animations fluides et une validation côté client à l'aide de HTML, CSS et JavaScript. Ce formulaire offre une expérience utilisateur améliorée et ressemble à quelque chose tout droit sorti de 2025 !

Démo en direct : https://codepen.io/HanGPIIIErr/pen/ZYzbrqW

Table des matières

  1. Présentation
  2. Prérequis
  3. Structure du projet
  4. Marquage HTML
  5. Style avec CSS
  6. Ajout d'interactivité avec JavaScript
  7. Conclusion

1.Introduction

Les formulaires en plusieurs étapes sont un excellent moyen d'améliorer l'expérience utilisateur en décomposant les formulaires longs en sections gérables. Dans ce didacticiel, nous allons créer un formulaire en cinq étapes qui comprend :

  • Informations personnelles
  • Préférences
  • Téléchargement d'images
  • Commentaires
  • Résumé et soumission

Nous ajouterons des animations fluides entre les étapes et validerons les entrées de l'utilisateur pour garantir l'intégrité des données.

Prérequis

Compréhension de base du HTML, CSS et JavaScript
Familiarité avec les éléments de formulaire et la gestion des événements en JavaScript

Structure du projet

Nous aurons trois fichiers principaux :

index.html — La structure HTML
style.css — Le style de notre formulaire
script.js — Le JavaScript pour gérer les interactions avec les formulaires
Commençons par configurer notre fichier 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);
    }
}
Copier après la connexion

Explication

  • Dégradé d'arrière-plan : un dégradé doux donne une impression de modernité.
  • Style de formulaire : nous utilisons un filtre de toile de fond pour un effet de morphisme de verre.
  • Transitions et animations : des transitions fluides et des animations d'images clés améliorent l'interactivité.
  • Effets de boutons : effets de survol avec léger mouvement et ombre pour la profondeur.
  • Ajout d'interactivité avec JavaScript

Rendons notre formulaire fonctionnel.

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');
        }
    });
});
Copier après la connexion

Explication

  • Écouteurs d'événements : pour les boutons « Suivant » et « Précédent » permettant de naviguer entre les étapes.
  • Validation : validateStep() garantit que les champs obligatoires sont remplis.
  • Affichage du résumé : displaySummary() compile les données saisies pour que l'utilisateur puisse les examiner.
  • Soumission du formulaire : lors de la soumission, le formulaire est réinitialisé et revient à la première étape.

? Conclusion : Forger l'avenir de la bataille des gladiateurs

Les dernières améliorations apportées à Gladiators Battle marquent un pas significatif vers une expérience fluide et captivante pour tous les joueurs. Avec un système de tutoriel enrichi, des composants modulaires, un écosystème de guilde florissant et des mini-jeux optimisés, le jeu évolue vers le RPG de gladiateur ultime.

Que vous soyez un nouveau venu explorant l'arène pour la première fois ou un guerrier chevronné dominant le champ de bataille, ces mises à jour permettent à chacun de se forger son propre héritage épique.

? Rejoignez le voyage !

Nous recherchons activement les commentaires des joueurs et des développeurs. Plongez dans Gladiators Battle et partagez vos réflexions avec nous.

? Site Web : https://gladiatorsbattle.com
?️ Soutenez-nous sur Kickstarter : https://www.kickstarter.com/projects/gladiatorsbattle/gladiators-battle-forge-your-legend-in-the-ultimate-arena
? Suivez-nous sur X (anciennement Twitter) : https://x.com/GladiatorsBT
? Connectez-vous sur LinkedIn : https://www.linkedin.com/in/pierre-romain-lopez
? Rejoignez la communauté sur Discord : https://discord.gg/YBNF7KjGwx

Merci pour votre soutien indéfectible alors que nous continuons à développer Gladiators Battle. Vos commentaires, vos idées et votre enthousiasme sont les moteurs de nos progrès.

Que l'aventure continue – Ave, Gladiateurs ! ?✨

Si vous avez des questions ou des suggestions, veuillez laisser un commentaire ci-dessous !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal