Étape 3

Ajouter de l’interaction avec JavaScript

JavaScript va permettre à la page de réagir aux actions de l’utilisateur : clic sur un bouton, affichage ou masquage d’un élément, filtre sur les cartes.

Liens utiles

1. Comprendre le rôle de JavaScript

HTML donne le contenu, CSS donne l’apparence, JavaScript ajoute le comportement. Un comportement peut être : “quand je clique sur ce bouton, alors le texte change”.

Exemple générique : modifier le texte d’un élément.

const element = document.querySelector("#message");
element.textContent = "Texte modifié";
  1. Dans le projet, tu utiliseras JavaScript pour créer un compteur, masquer des détails et filtrer des cartes.
  2. Avant de coder, repère les éléments HTML qui devront être contrôlés par JavaScript.

2. Relier JavaScript à la page

Il existe plusieurs façons d’écrire du JavaScript dans une page web.

On va donc créer un fichier JavaScript séparé et le relier avec defer. defer permet d’attendre que le HTML soit chargé avant d’exécuter le script.

<script src="script.js" defer></script>
  1. Crée un fichier JavaScript séparé.
  2. Relie-le dans le <head> avec une balise <script>.
  3. Écris temporairement console.log("JavaScript chargé"); pour vérifier que le fichier est lu.

3. Ajouter des repères dans le HTML

JavaScript doit retrouver certains éléments dans le HTML. Pour cela, on utilise des id, des class et des attributs data-.... Les data-attributs servent à stocker une petite information directement sur un élément HTML. Dans ce TP, chaque carte peut stocker sa note dans data-rating.

Exemple générique : stocker une information sur un élément.

<article class="product-card" data-price="25">
    ...
</article>
  1. Ajoute un id sur le bouton qui servira au compteur.
  2. Ajoute un id sur l’élément qui affichera la valeur du compteur.
  3. Ajoute une classe commune sur les détails que tu veux masquer ou afficher.
  4. Ajoute un data-rating sur chaque carte de jeu.
  5. Ajoute un id sur la case à cocher du filtre.
  6. Ajoute un id sur le bouton qui affichera ou masquera les détails.

4. Retrouver des éléments et les garder en constante

En programmation, une constante sert à stocker une information en mémoire pendant l’exécution du programme. Ici, on stocke surtout des références vers des éléments HTML. Ces informations vivent dans la mémoire du navigateur : si la page est rechargée, elles sont recréées.

Pour conserver une information après fermeture ou rechargement, il faudrait la stocker ailleurs, par exemple dans une base de données. Ce sera seulement une idée à retenir pour plus tard.

Exemple générique : retrouver un élément unique et plusieurs éléments.

const mainButton = document.querySelector("#main-button");
const cards = document.querySelectorAll(".card");
  1. Crée une constante pour chaque élément unique à contrôler.
  2. Crée une constante avec querySelectorAll pour les listes d’éléments, comme les cartes ou les détails.

5. Créer le compteur de like

Une variable sert à stocker une valeur qui peut changer. C’est la différence avec une constante : une constante garde la même référence, alors qu’une variable peut être modifiée pendant l’exécution.

Un compteur utilise une variable, car sa valeur augmente à chaque clic.

Exemple générique : modifier un nombre.

let count = 0;
count = count + 1;

Les opérations arithmétiques de base sont :

  1. Crée une variable qui démarre à 0 pour le nombre de likes.
  2. Prévois qu’elle augmentera de 1 au clic sur le bouton.

6. Créer une fonction pour mettre à jour un texte

Une fonction regroupe une action et lui donne un nom. Elle ne s’exécute pas toute seule : il faut l’appeler.

Exemple générique : déclarer puis appeler une fonction.

function showMessage() {
    console.log("Bonjour");
}

showMessage();

Pour fabriquer un texte avec une valeur, on peut concaténer, c’est-à-dire coller plusieurs morceaux de texte.

const name = "Alex";
const message = "Bonjour " + name;

Pour choisir entre deux cas, on utilise if et else.

const age = 14;

if (age >= 18) {
    console.log("Majeur");
} else {
    console.log("Mineur");
}
  1. Crée une fonction qui met à jour le texte du compteur.
  2. Utilise la concaténation pour construire le texte affiché.
  3. Utilise une condition pour gérer le singulier et le pluriel.
  4. Appelle cette fonction après chaque modification du compteur.

7. Réagir au clic avec un événement

Un événement est une action qui arrive dans la page : clic, changement de case, touche pressée. addEventListener permet de dire : “quand cet événement arrive, exécute cette fonction”.

Exemple générique : réagir au clic d’un bouton.

mainButton.addEventListener("click", function () {
    console.log("Bouton cliqué");
});
  1. Ajoute un événement click sur le bouton de like.
  2. Dans cet événement, augmente la variable du compteur.
  3. Appelle la fonction qui met à jour le texte affiché.
  4. Recharge la page et teste plusieurs clics.

8. Masquer les détails avec une classe CSS

Pour masquer un élément, il faut une classe CSS que JavaScript pourra ajouter ou retirer. Ce code CSS est donné directement car il est nécessaire pour la suite.

.is-hidden {
    display: none;
}

classList permet de manipuler les classes d’un élément.

Exemples génériques :

element.classList.add("is-hidden");
element.classList.remove("is-hidden");
element.classList.toggle("is-hidden");
  1. Ajoute la classe is-hidden dans le CSS.
  2. Crée une fonction qui parcourt les éléments de détails.
  3. Choisis toggle, add ou remove selon l’effet voulu.
  4. Relie cette fonction au bouton “Afficher / masquer les détails”.

9. Répéter une action avec forEach

forEach permet d’exécuter la même action sur chaque élément d’une liste. C’est utile quand on a plusieurs cartes ou plusieurs descriptions.

Exemple générique :

items.forEach(function (item) {
    console.log(item);
});
  1. Utilise forEach pour agir sur toutes les descriptions.
  2. Tu réutiliseras aussi forEach pour filtrer toutes les cartes.

10. Filtrer les cartes avec une condition

La case à cocher indique si le filtre est actif ou non. La note de chaque carte peut être lue depuis son data-attribut.

Exemple générique : lire une information stockée dans le HTML.

const value = Number(element.dataset.price);

Une condition permet ensuite de choisir si l’élément doit être affiché ou masqué.

if (value > 10) {
    element.classList.add("is-hidden");
} else {
    element.classList.remove("is-hidden");
}
  1. Crée une fonction pour filtrer les cartes.
  2. Lis l’état de la case à cocher avec checked.
  3. Parcours toutes les cartes avec forEach.
  4. Lis la note de chaque carte depuis son data-rating.
  5. Transforme la note en nombre avec Number.
  6. Cache ou affiche la carte avec classList.
  7. Relie cette fonction à l’événement change de la case à cocher.

11. Tester dans l’ordre

Étape précédente : CSS Étape suivante : PHP