La documentation est en cours de rédaction, 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

Architecture 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. Premièrement il faut créer un dossier pour notre projet et nous l'appellerons avatar-creator. Dans ce dossier, nous allons créer trois fichiers : index.html, style.css et global.js. Nous allons également créer un dossier sections qui regroupera 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
                                

Bonnes pratiques

En règle générale, on utilise des noms de dossiers en anglais. Cela permet de faciliter la compréhension du code par les autres développeurs.

Fichier reset.css

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

Dossier UI : contiendra les éléments de l'interface utilisateur, tels que des icônes ou des images.

Structure des sections : Chaque section suit la même structure : [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
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta 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
<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>

Explication du code

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.

Note importante

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.

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
<!--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
<!--Bouton de téléchargement-->                     
<button id="download">
    Mon Avatar est prêt !<br />
</button>

Sections d'Avatar

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="1", la deuxième image aura un attribut data-element="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.

Options partagées

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.

Système de couleurs

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.

Flexibilité du système : De la même façon, certaines options peuvent être utilisées dans plusieurs catégories d'avatar. Les vêtements peuvent être utilisés 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
<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 définir 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 déterminer 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 classe .active pour que ce soit la section visible au lancement du jeu.

HTML index.html
<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 défaut, nous allons afficher la couleur noir. Cette option est importante car elle permettra de déterminer pour l'ensemble du jeu la couleur de cheveux de l'utilisateur.

Ce genre de section peut être utilisé pour les yeux, les sourcils, les vêtements et les accessoires.

HTML index.html
<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
<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
<head>
    <meta charset="UTF-8">
    <meta 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
<head>
    <meta charset="UTF-8">
    <meta 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
/*---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
/*---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;
}

Résultats

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
/*---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
/*---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;
}

Couleurs

Occupons-nous désormais 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
/*---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 catégories

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

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

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.

Gestion des vignettes

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

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();

Gestion des couleurs

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

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();