La documentation est en cours de redaction, certaines informations sont manquantes

Créer un jeu de création d'avatar en HTML, CSS et JavaScript

TUTORIEL FACILE

Introduction

Bienvenue dans ce tutoriel où nous allons apprendre à créer des avatars en utilisant JavaScript, étape par étape comment construire un jeu d'avatar interactif.

Nous allons couvrir les bases du développement web, en utilisant JavaScript pour la logique, HTML pour la structure de la page, et CSS pour le style. Vous apprendrez à permettre aux utilisateurs de personnaliser leurs avatars avec différentes options pour créer des personnages uniques.


Prérequis

Avant de plonger dans la création de votre jeu d'avatar en JavaScript, HTML et CSS, assurez-vous d'avoir les éléments suivants en place :

Éditeur de code

Assurez-vous d'avoir un éditeur de code installé sur votre machine. Nous recommandons l'utilisation de Visual Studio Code, un éditeur puissant et convivial largement utilisé par les développeurs web. Si vous n'avez pas déjà installé Visual Studio Code, vous pouvez le télécharger à partir du site officiel.

Notions de base en HTML, CSS et JavaScript

Ce tutoriel suppose une compréhension de base des langages de balisage HTML, des feuilles de style CSS pour la mise en forme, et du langage de programmation JavaScript pour la logique dynamique. Si vous n'êtes pas familier avec ces concepts, nous vous recommandons de passer en revue les bases avant de poursuivre. Il existe de nombreuses ressources en ligne pour vous aider à acquérir ces compétences, et une connaissance préalable facilitera grandement votre expérience avec ce tutoriel.

Éléments de l'avatar

Préparez au moins 4 à 5 formes pour chaque catégorie d'avatar que vous souhaitez inclure (coiffures, accessoires, vêtements, etc.). Assurez-vous que tous les éléments sont au format PNG pour prendre en charge la transparence. Uniformisez la taille de chaque élément à 1000x1000 pixels pour maintenir la cohérence visuelle.

En résumé, assurez-vous d'avoir un éditeur de code prêt à l'emploi et une compréhension préalable des concepts de base en HTML, CSS et JavaScript. Avec ces prérequis en place, vous êtes prêt à plonger dans le processus de création de votre propre jeu d'avatar interactif !

Pour faciliter votre expérience dans la création du jeu d'avatar en JavaScript, HTML et CSS, je mets à votre disposition un kit de démarrage. Ce kit comprend les documents de base, une structure de dossier prête à l'emploi, ainsi que des éléments visuels d'exemple pour chaque catégorie d'avatar (coiffures, accessoires, vêtements, etc.).
Ce kit de démarrage vous permettra de gagner du temps en vous fournissant une base solide pour commencer votre projet sans avoir à créer chaque élément visuel dès le départ.

Télécharger le kit de démarrage

Architectures des dossiers

Avant de commencer à coder, nous allons d'abord créer une structure de dossiers pour notre jeu d'avatar. Cette structure de dossiers nous aidera à organiser notre code et à maintenir une base de code propre et modulaire. Premierement il faut créer un dossier pour notre projet et nous l'appelerons avatar-creator. Dans ce dossier, nous allons créer trois fichier : index.html, style.css et global.js. Nous allons également créer un dossier sections qui regrouperas nos images.

Pour faciliter la compréhension de la structure de notre dossier, nous allons créer des sous-dossiers dans le dossier avatar-creator pour chaque catégorie d'avatar. Dans notre cas, nous aurons des sous-dossiers pour les coiffures, les accessoires, les vêtements, les yeux, les sourcils, les bouches, les nez et les oreilles. Nous aurons également un sous-dossier pour les images de base, qui contiendra les images de base pour les avatars masculins et féminins.

Notre structure de dossiers ressemblera à ceci :

📦avatar-creator
 ┣ 📂sections
 ┃ ┣ 📂Eyes
 ┃ ┃ ┣ 📜1.png
 ┃ ┃ ┣ 📜2.png
 ┃ ┃ ┣ 📜3.png
 ┃ ┃ ┗ 📜(...).png
 ┃ ┣ 📂Hair 
 ┃ ┃ ┣ 📂1
 ┃ ┃ ┃ ┣ 📜black.png
 ┃ ┃ ┃ ┣ 📜darkbrown.png
 ┃ ┃ ┃ ┣ 📜brown.png
 ┃ ┃ ┃ ┗ 📜(...).png
 ┃ ┃ ┣ 📂2
 ┃ ┃ ┣ 📂3
 ┃ ┃ ┗ 📂(...)
 ┃ ┣ 📂Mouth
 ┃ ┣ 📂Nose
 ┃ ┣ 📂Skin
 ┃ ┃ ┣ 📂men
 ┃ ┃ ┗ 📂women
 ┃ ┗ 📂Top 
 ┃ ┃ ┣ 📂men
 ┃ ┃ ┃ ┣ 📂1
 ┃ ┃ ┃ ┃ ┣ 📜black.png
 ┃ ┃ ┃ ┃ ┣ 📜grey.png
 ┃ ┃ ┃ ┃ ┣ 📜white.png
 ┃ ┃ ┃ ┃ ┗ 📜(...).png
 ┃ ┃ ┃ ┣ 📂2
 ┃ ┃ ┃ ┣ 📂3
 ┃ ┃ ┃ ┗ 📂(...)
 ┃ ┃ ┗ 📂women
 ┣ 📂UI
 ┣ 📜global.js
 ┣ 📜index.html
 ┣ 📜reset.css
 ┗ 📜style.css
                        
En regle général on utilise des noms de dossiers en anglais. Cela permet de faciliter la compréhension du code par les autres développeurs.

Nous allons également créer un fichier reset.css qui contiendra les styles de réinitialisation de notre page.

Le dossier UI contiendra les éléments de l'interface utilisateur, tels que des icones ou des images.
Pour ce qui est des sections, on retrouve la même structure de dossiers. Chaque section [nom de la section] avec une majuscule puis [option] puis [couleur.png/variation.png].

Étape 1 : Créer un fichier HTML

La première étape de la création de votre jeu d'avatar consiste à créer un fichier HTML. C'est dans ce fichier que nous définirons la structure de la page et que nous inclurons les éléments nécessaires à l'interaction avec l'utilisateur. Pour commencer, ouvrez le fichier index.html.

HTML index.html Copier le code
                            
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8">
        <mesta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Creation d'avatar</title>
    </head>
    <body>
    </body>
</html>
                    
                


Pour construire la base de notre jeu d'avatar, nous allons diviser notre page en deux sections principales : une section pour afficher le résultat final de l'avatar personnalisé et une section pour la sélection des différentes options. De plus, nous inclurons un en-tête (header) qui contiendra la navigation et un bouton de téléchargement.

HTML index.html Copier le code
                            
<body>
    <div class="grid-2">
        <div id="leftSection">
            <div class="result">
                <canvas id="resultFinal" width="1000" height="1000"></canvas>
                <img src="sections/Skin/men/1.png" alt="Avatar" id="resultSkin">
                <img src="sections/Hair/1/black.png" alt="Avatar" id="resultHair">
                <img src="sections/Eyes/1.png" alt="Avatar" id="resultEyes">
                <img src="sections/Mouth/1.png" alt="Avatar" id="resultMouth">
                <img src="sections/Nose/1.png" alt="Avatar" id="resultNose">
                <img src="sections/Top/men/1/red.png" alt="Avatar" id="resultTop">
            </div>
        </div>
        <div id="rightSection">
            <header>
                <!-- Navigation des différentes sections-->
            </header>
            <main>
                <!--Sections-->
            </main>
        </div>
    </div>
</body>
                    
                

Dans la section de gauche, nous allons inclure un canvas pour afficher le résultat final de l'avatar personnalisé. Nous allons également inclure des images pour chaque option d'avatar. Ces images seront utilisées pour afficher les options sélectionnées par l'utilisateur. Ces images sont les choix par défaut de l'utilisateur. Lorsque l'utilisateur sélectionne une option, nous allons mettre à jour l'image. Par exemple, si l'utilisateur sélectionne une option de cheveux, nous allons mettre à jour l'image des cheveux pour afficher l'option sélectionnée.

Avant de plonger dans la complexité du développement de votre jeu d'avatar, nous allons commencer par travailler avec des éléments simples. Cette approche nous permettra de bien comprendre les bases et de construire progressivement vers des concepts plus avancés. Dans cette première étape, nous allons créer des éléments de base pour l'affichage du résultat final de l'avatar et la sélection des options. Au fil du tutoriel, nous évoluerons vers des méthodes plus avancées pour rendre votre code plus modulaire, maintenable et extensible.


Navigation

Pour permettre aux utilisateurs de naviguer entre les différentes options d'avatar, nous allons créer des boutons de navigation qui correspondent à des catégories spécifiques. Ces boutons permettront de changer dynamiquement le contenu de la section de sélection d'options.

HTML index.html Copier le code
                            
<!--Header de la section de droite-->
<header>
    <nav id="categories">
        <ul>
            <li><button type="button" data-target="Skin" class="active">Peau</button></li>
            <li><button type="button" data-target="Mouth">Bouche</button></li>
            <li><button type="button" data-target="Nose">Nez</button></li>
            <li><button type="button" data-target="Eyes">Regard</button></li>
            <li><button type="button" data-target="Hair">Cheveux</button></li>
            <li><button type="button" data-target="Top">Vetement</button></li>
        </ul>
    </nav>
</header>
                            
                            

Nous allons également inclure un bouton de téléchargement dans la section de la peau pour permettre aux utilisateurs de télécharger leur avatar personnalisé.

HTML index.html Copier le code
                            
<!--Bouton de téléchargement-->                     
<button id="download">
    Mon Avatar est prêt !
</button>

Sections

Maintenant que nous avons créé les boutons de navigation, nous allons créer les sections correspondantes pour afficher les options d'avatar. Nous allons créer une section pour chaque catégorie d'avatar et inclure les options correspondantes dans chaque section. Chaque section est composée d'une liste d'images qui représentent les options d'avatar. Chaque image est enveloppée dans une balise li et possède un attribut data-element qui correspond à l'élément d'avatar. Par exemple, la première image de la section de la peau aura un attribut data-element de 1, la deuxième image aura un attribut data-element de 2, et ainsi de suite.

Nous utiliserons ces attributs data-element pour identifier les options d'avatar et les afficher dans la section de résultat final.
Des options peuvent exister dans plusieurs catégories d'avatar. Par exemple, la peau peut être utilisée pour les avatars masculins et féminins. Pour éviter les doublons, nous allons créer une seule section pour la peau et l'inclure dans les deux catégories d'avatar.
On peut également ajouter une couleur à certaines options. Par exemple, les cheveux peuvent avoir une couleur. Pour permettre aux utilisateurs de choisir une couleur, nous allons créer une section pour les couleurs et l'inclure dans les catégories d'avatar qui ont des options de couleur.
De la meme façon, certaine option peuvent être utilisé dans plusieurs catégories d'avatar. Les vetements peuvent être utilisé pour les avatars masculins et féminins et avoir une couleur.

Section sans options

Nous allons commencer par créer une section pour la bouche. Cette section contiendra aucune option pour le moment.

HTML index.html Copier le code
                                
<section id="Mouth">
    <ul class="vignettes">
        <li class="vignette active" data-element="1"><img src="sections/Mouth/1.png" alt="Mouth - 1"></li>
        <li class="vignette" data-element="2"><img src="sections/Mouth/2.png" alt="Mouth - 2"></li>
        <li class="vignette" data-element="3"><img src="sections/Mouth/3.png" alt="Mouth - 3"></li>
        <li class="vignette" data-element="4"><img src="sections/Mouth/4.png" alt="Mouth - 4"></li>
        <li class="vignette" data-element="5"><img src="sections/Mouth/5.png" alt="Mouth - 5"></li>
        <li class="vignette" data-element="6"><img src="sections/Mouth/6.png" alt="Mouth - 6"></li>
        <li class="vignette" data-element="7"><img src="sections/Mouth/7.png" alt="Mouth - 7"></li>
        <li class="vignette" data-element="8"><img src="sections/Mouth/8.png" alt="Mouth - 8"></li>
    </ul>
</section>
                                
                            

Section pour definir le genre

Ensuite, nous allons créer une section pour la peau. Cette section contiendra des options de couleur pour la peau et des options de genre pour les avatars masculins et féminins. Cette option est importante car elle permettra de determiner pour l'ensemble du jeu si l'utilisateur est un homme ou une femme. Cette option se comporte comme pour le choix des couleurs. J'initialise la section avec la class .active pour que ça soit la section visible au lancement du jeu.

HTML index.html Copier le code
                                
<section id="Skin" class="active">
    <ul class="vignettes">
        <li class="vignette active" data-element="men"><img src="sections/Skin/men/1.png" alt="Skin - men"></li>
        <li class="vignette" data-element="women"><img src="sections/Skin/women/1.png" alt="Skin - women"></li>
    </ul>
    <ul class="colors">
<li class="color active" data-color="1" style="background-color: #eed8c5;"></li> <li class="color" data-color="2" style="background-color: #d1b39a;"></li> <li class="color" data-color="3" style="background-color: #bd9574;"></li> <li class="color" data-color="4" style="background-color: #ba875e;"></li> <li class="color" data-color="5" style="background-color: #9b6e4a;"></li> <li class="color" data-color="6" style="background-color: #775235;"></li> <li class="color" data-color="7" style="background-color: #68513f;"></li> <li class="color" data-color="8" style="background-color: #64554b;"></li> </ul> </section>

Section avec option couleur

Ensuite, nous allons créer une section pour les cheveux. Cette section contiendra des options de couleur pour les cheveux. Par defaut, nous allons afficher la couleur noir. Cette option est importante car elle permettra de determiner pour l'ensemble du jeu la couleur de cheveux de l'utilisateur. Ce genre de section peut etre utilisés pour les yeux, les sourcils, les vetements et les accessoires.

HTML index.html Copier le code
                                            
            <section id="Hair">
                <ul class="vignettes">
                    <li class="vignette" data-element="1"><img src="sections/Hair/1/black.png" alt="Hair - 1"></li>
                    <li class="vignette" data-element="2"><img src="sections/Hair/2/black.png" alt="Hair - 2"></li>
                    <li class="vignette" data-element="3"><img src="sections/Hair/3/black.png" alt="Hair - 3"></li>
                    <li class="vignette" data-element="4"><img src="sections/Hair/4/black.png" alt="Hair - 4"></li>
                    <li class="vignette" data-element="5"><img src="sections/Hair/5/black.png" alt="Hair - 5"></li>
                    <li class="vignette" data-element="6"><img src="sections/Hair/6/black.png" alt="Hair - 6"></li>
                    <li class="vignette" data-element="7"><img src="sections/Hair/7/black.png" alt="Hair - 7"></li>
                    <li class="vignette" data-element="8"><img src="sections/Hair/8/black.png" alt="Hair - 8"></li>
                    <li class="vignette" data-element="9"><img src="sections/Hair/9/black.png" alt="Hair - 9"></li>
                    <li class="vignette" data-element="10"><img src="sections/Hair/10/black.png" alt="Hair - 10"></li>

                </ul>
                <ul class="colors">
                    <li class="color active" data-color="black" style="background-color: #000000;"></li>
                    <li class="color" data-color="darkbrown" style="background-color: #373018;"></li>
                    <li class="color" data-color="brown" style="background-color: #7e623e;"></li>
                    <li class="color" data-color="darkred" style="background-color: #a9612e;"></li>
                    <li class="color" data-color="ginger" style="background-color: #db792e;"></li>
                    <li class="color" data-color="blond" style="background-color: #dede7e;"></li>
                    <li class="color" data-color="gray" style="background-color: #888888;"></li>
                    <li class="color" data-color="white" style="background-color: #ededed;"></li>
                </ul>
            </section>
            
                                        

Section avec options genre & couleurs

Ensuite, nous allons créer une section pour les vêtements. Cette section contiendra des options de couleur seulement. Le choix du genre aura été réalisé en amont lors du choix de la peau.

HTML index.html Copier le code
                                
<section id="Top">
    <ul class="vignettes">
        <li class="vignette" data-element="1"><img src="sections/Top/1/men/red.png" alt="Top - 1"></li>
        <li class="vignette" data-element="2"><img src="sections/Top/2/men/red.png" alt="Top - 2"></li>
        <li class="vignette" data-element="3"><img src="sections/Top/3/men/red.png" alt="Top - 3"></li>
        <li class="vignette" data-element="4"><img src="sections/Top/4/men/red.png" alt="Top - 4"></li>
        <li class="vignette" data-element="5"><img src="sections/Top/5/men/red.png" alt="Top - 5"></li>
        <li class="vignette" data-element="6"><img src="sections/Top/6/men/red.png" alt="Top - 6"></li>
    </ul>
    <ul class="colors">
        <li class="color" data-color="black" style="background-color: #000000;"></li>
        <li class="color" data-color="grey" style="background-color: #888888;"></li>
        <li class="color" data-color="white" style="background-color: #ffffff;"></li>
        <li class="color active" data-color="red" style="background-color: #ff0000;"></li>
        <li class="color" data-color="orange" style="background-color: #ff8800;"></li>
        <li class="color" data-color="yellow" style="background-color: #ffff00;"></li>
        <li class="color" data-color="green" style="background-color: #44ff44;"></li>
        <li class="color" data-color="blue" style="background-color: #0000ff;"></li>
        <li class="color" data-color="purple" style="background-color: #aa44aa;"></li>
    </ul>
</section>

                            

Vous avez maintenant toutes les sections de votre avatar. Il ne vous reste plus qu'à les styliser.

Style CSS

Créez un fichier CSS et ajoutez le lien vers ce fichier dans la section head de votre document HTML.

HTML index.html Copier le code
                            
<head>
    <meta charset="UTF-8">
    <mesta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Creation d'avatar</title>
    <link rel="stylesheet" href="style.css">
</head>
                    
                

Nous allons commencer par réinitialiser les styles de base de notre page. Pour cela, nous allons utiliser le fichier CSS de reset de Eric Meyer. Ce fichier permet de réinitialiser les styles de base de votre page et d'éviter les problèmes de compatibilité entre les navigateurs.

Télécharger le fichier CSS de reset

Ajoutez le code suivant dans votre fichier CSS.

HTML index.html Copier le code
                            
<head>
    <meta charset="UTF-8">
    <mesta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Creation d'avatar</title>
    <link rel="stylesheet" href="reset.css">
    <link rel="stylesheet" href="style.css">
</head>
                    
                
CSS style.css Copier le code
                                                         
/*---GLOBAL---*/
.grid-2 {
	display: grid;
	grid-template-columns: 40% 60%;
	grid-gap: 0px;
}
#leftSection{
    background-color: #eaeaea;
    padding: 16px;
    font-size: 16px;
}
#rightSection{
    background-color: #1f1f1f;
    color: white;
    padding: 16px;
    font-size: 16px;
}

                            
                        

Navigation

Nous allons commencer par styliser la navigation. Nous allons utiliser la propriété display:flex pour afficher les boutons de navigation sur une ligne.

Ajoutez le code suivant dans votre fichier CSS.

CSS style.css Copier le code
                            
/*---NAVIGATION---*/                                
header{
    display: flex;
    justify-content: space-between;
    align-items: stretch;
    gap: 16px;
}
header nav ul{
    display: flex;
    gap: 16px;
    padding: 8px;
    background-color: white;
    border-radius: 8px;
    box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
}
button{
    padding: 8px;
    border-radius: 8px;
    border: none;
    background-color: #eaeaea;
    color: black;
    cursor: pointer;
    border:solid 2px #eaeaea;
    transition: all ease-in-out 0.5s;
}
button.active,button:hover{
    background-color: #1f1f1f;
    color: white;
}
                            
                        

Resultats

Afin de rendre le résultat final de l'avatar plus attrayant, nous allons ajouter une ombre et un fond blanc. Nous allons également utiliser la propriété object-fit:cover pour afficher l'image de l'avatar en plein écran.
Ajoutez le code suivant dans votre fichier CSS.

CSS style.css Copier le code
                            
                    /*---RESULT---*/
.result {
    overflow: hidden;
    max-width: 100%;
    position: relative;
    background-color: white;
    border-radius: 1rem;
    margin: 1rem 2rem;
    box-shadow: rgba(0, 0, 0, 0.15) 0px 2px 8px;
    min-height: 80vh;
    min-width: 80vh;
}

.result:after {
    content: "";
    display: block;
    padding-bottom: 100%;
}

.result img {
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    width: 100%;
    object-fit: cover;
    height: auto;
}
#resultFinal{
    display: none;
}


                        

Sections

Nous allons maintenant styliser les sections. Nous allons utiliser la propriété display:grid pour afficher les vignettes sur une ligne. Nous allons également utiliser la propriété grid-template-columns pour définir la largeur de chaque vignette.

Ajoutez le code suivant dans votre fichier CSS.

CSS style.css Copier le code
                            
/*---SECTIONS---*/                           
main section{
    display: none;
}
main section.active{
    padding: 16px 0px;
    display: block;
}

/*---VIGNETTES---*/
.vignettes{
    overflow-y: auto;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(170px, 1fr));
    grid-auto-rows: max-content;
    grid-gap: 16px;
}
.vignette{
    transition: all ease-in-out 0.5s;
    transition-duration: 0.5s;
    cursor: pointer;
    transition-duration: 300ms;
    box-shadow: rgba(0,0,0,0.18) 0px 2px 4px;
    border-radius: 16px;
    position: relative;
    background-size: 100%;
    background-color: white;
    overflow: hidden;
}
.vignette:after{
    content: "";
    display: block;
    padding-bottom: 100%;
}
.vignette img{
    position: absolute;
    top: 0;
    left: 0;
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    image-rendering: optimizequality;
}

                            
                        

Occupons nous desormais des sections de couleurs. Nous allons utiliser la propriété display:grid pour afficher les couleurs sur une ligne. Nous allons également utiliser la propriété grid-template-columns pour définir la largeur de chaque couleur.

Ajoutez le code suivant dans votre fichier CSS.

CSS style.css Copier le code
                            
/*---COULEURS---*/
.colors{
    background-color: white;
    padding:1rem;
    border-radius: 10px;
    box-shadow: rgba(0,0,0,0.18) 0px 2px 4px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(50px, 1fr));
    grid-gap:8px;
    height:max-content;
    margin-top: 1rem;
}
.color{
    display: block;
    width: 50px;
    height: 50px;
    border-radius: 10px;
    box-shadow:0px 0px 0px 2px rgba(0, 0, 0, .3) inset;
    transition: all ease-in-out 0.5s;
}
.color:active,.color:hover{
    box-shadow:0px 0px 0px 2px rgb(255, 255, 255) inset;
    cursor: pointer;
}


JavaScript

Changer de categories

Nous allons maintenant ajouter le code JavaScript pour changer de catégorie lorsque l'utilisateur clique sur un bouton de navigation. Nous allons utiliser la méthode addEventListener pour détecter le clic sur un bouton de navigation. Nous allons également utiliser la méthode querySelectorAll pour sélectionner tous les boutons de navigation.

Ajoutez le code suivant dans votre fichier JavaScript.

JS global.js Copier le code
                                                
const navigationButtons = document.querySelectorAll('#categories button');
const sections = document.querySelectorAll('main section');
// Fonction qui permet de changer de section en cliquant sur les boutons de navigation
function switchSection() {
    navigationButtons.forEach(button => {
        button.addEventListener('click', function () {
            //Ajout de la classe active au bouton cliqué
            navigationButtons.forEach(button => {
                button.classList.remove("active");
            })
            this.classList.add("active");
            //Ajout de la classe active à la section correspondante
            const dataTarget = this.getAttribute('data-target');
            const sectionTarget = document.getElementById(dataTarget);
            sections.forEach(section => {
                section.classList.remove("active");
            })
            sectionTarget.classList.add("active");
        })
    });
}

switchSection();


Réecrire l'URL du résultat

JS global.js Copier le code
                                                
let currentGender = "men";
let sectionsWithGender = ['Top'];
let sectionsWithColor = ['Skin','Hair','Top'];

function changeResultURL(sectionName){
    let section = document.getElementById(sectionName);
    let result = document.getElementById('result' + sectionName);
    let url;
    //On récupère la vignette active et on récupère l'attribut data-element
    let activeVignette = section.querySelector('.vignette.active');
    let dataElement = activeVignette.getAttribute('data-element');

    //Si la section est une section avec couleur, on récupère la couleur active et on récupère l'attribut data-color
    if(sectionsWithColor.includes(sectionName)){

        let activeColor = section.querySelector('.color.active');
        let dataColor = activeColor.getAttribute('data-color');
        url = "sections/" + sectionName + "/" + dataElement + "/" + dataColor + ".png";
        if (sectionsWithGender.includes(sectionName)){
            url = "sections/" + sectionName + "/" + currentGender + "/" + dataElement + "/" + dataColor + ".png";
        }
    //Sinon, on récupère l'attribut data-element de la vignette active    
    }else{
        url = "sections/" + sectionName + "/" + dataElement + ".png";
        if (sectionsWithGender.includes(sectionName)){
            url = "sections/" + sectionName + "/" + currentGender + "/" + dataElement + ".png";
        }
    }
    result.setAttribute('src', url);
}

La fonction changeResultURL permet de changer l'image du résultat final en fonction de la section sélectionnée. Elle prend en paramètre le nom de la section et utilise la méthode querySelector pour sélectionner la vignette active. Elle utilise ensuite la méthode getAttribute pour récupérer l'attribut data-element de la vignette active. Elle utilise également la méthode setAttribute pour changer l'attribut src de l'image du résultat final.

Nous allons maintenant ajouter le code JavaScript pour changer l'image du résultat final lorsque l'utilisateur sélectionne une option. Nous allons utiliser la méthode addEventListener pour détecter le clic sur une vignette. Nous allons également utiliser la méthode querySelectorAll pour sélectionner toutes les vignettes.

Ajoutez le code suivant dans votre fichier JavaScript.

JS global.js Copier le code
                                                
function changeShape() {
    //Pour chacune des sections, on récupère les vignettes et le nom de la section
    for (const section of sections) {
        let vignettes = section.querySelectorAll('.vignette');
        let sectionName = section.getAttribute('id');
        for (const vignette of vignettes) {
            vignette.addEventListener('click', function () {
                //On retire la classe active de toutes les vignettes de la section et on l'ajoute à la vignette cliquée
                for(const vignette of vignettes){
                    vignette.classList.remove("active");
                }
                this.classList.add("active");

                changeResultURL(sectionName);
            });
        }
    }
}
changeShape();

Nous allons également ajouter le code JavaScript pour changer la couleur de l'avatar lorsque l'utilisateur sélectionne une couleur. Nous allons utiliser la méthode addEventListener pour détecter le clic sur une couleur. Nous allons également utiliser la méthode querySelectorAll pour sélectionner toutes les couleurs.

JS global.js Copier le code
                                                
function changeColor() {
    for (const section of sections) {
        let colors = section.querySelectorAll('.color');
        let sectionName = section.getAttribute('id');
        for (const color of colors) {
            color.addEventListener('click', function () {
                //On retire la classe active de toutes les vignettes de la section et on l'ajoute à la vignette cliquée
                for(const color of colors){
                    color.classList.remove("active");
                }
                this.classList.add("active");
                changeResultURL(sectionName);
            });
        }
    }
}

changeColor();