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

Dec 05, 2024 pm 10:21 PM

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.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

<!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.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

jQuery Vérifiez si la date est valide jQuery Vérifiez si la date est valide Mar 01, 2025 am 08:51 AM

Des fonctions JavaScript simples sont utilisées pour vérifier si une date est valide. fonction isValidDate (s) { var bits = s.split ('/'); var d = new Date (bits [2] '/' bits [1] '/' bits [0]); return !! (d && (d.getMonth () 1) == bits [1] && d.getDate () == Number (bits [0])); } //test var

jQuery obtient un rembourrage / marge d'élément jQuery obtient un rembourrage / marge d'élément Mar 01, 2025 am 08:53 AM

Cet article explique comment utiliser jQuery pour obtenir et définir les valeurs de marge et de marge intérieures des éléments DOM, en particulier les emplacements spécifiques de la marge extérieure et des marges intérieures de l'élément. Bien qu'il soit possible de définir les marges intérieures et extérieures d'un élément à l'aide de CSS, l'obtention de valeurs précises peut être délicate. // installation $ ("div.header"). CSS ("marge", "10px"); $ ("div.header"). css ("padding", "10px"); Vous pourriez penser que ce code est

10 onglets jQuery Accordion 10 onglets jQuery Accordion Mar 01, 2025 am 01:34 AM

Cet article explore dix onglets jQuery exceptionnels et accordéons. La principale différence entre les onglets et les accordéons réside dans la façon dont leurs panneaux de contenu sont affichés et cachés. Plongeons ces dix exemples. Articles connexes: 10 plugins de l'onglet jQuery

10 vaut la peine de vérifier les plugins jQuery 10 vaut la peine de vérifier les plugins jQuery Mar 01, 2025 am 01:29 AM

Découvrez dix plugins jQuery exceptionnels pour élever le dynamisme et l'attrait visuel de votre site Web! Cette collection organisée offre diverses fonctionnalités, de l'animation d'image aux galeries interactives. Explorons ces outils puissants: Related Posts: 1

Http débogage avec le nœud et le http-console Http débogage avec le nœud et le http-console Mar 01, 2025 am 01:37 AM

HTTP-Console est un module de nœud qui vous donne une interface de ligne de commande pour exécuter les commandes HTTP. C'est idéal pour le débogage et voir exactement ce qui se passe avec vos demandes HTTP, qu'elles soient faites contre un serveur Web, Web Serv

Tutoriel de configuration de l'API de recherche Google personnalisé Tutoriel de configuration de l'API de recherche Google personnalisé Mar 04, 2025 am 01:06 AM

Ce tutoriel vous montre comment intégrer une API de recherche Google personnalisée dans votre blog ou site Web, offrant une expérience de recherche plus raffinée que les fonctions de recherche de thème WordPress standard. C'est étonnamment facile! Vous pourrez restreindre les recherches à Y

jQuery Ajouter une barre de défilement à div jQuery Ajouter une barre de défilement à div Mar 01, 2025 am 01:30 AM

L'extrait de code jQuery suivant peut être utilisé pour ajouter des barres de défilement lorsque le contenu DIV dépasse la zone de l'élément de conteneur. (Pas de démonstration, veuillez le copier directement sur Firebug) // d = document // w = fenêtre // $ = jQuery var contentArea = $ (this), wintop = contentArea.scrollTop (), docheight = $ (d) .height (), winheight = $ (w) .height (), divheight = $ ('# c

See all articles