Le JS c'est trop dur

Donc on va faire quelques tutos

En guise de rappel...

getElementByID : On a un objet élément qui correspond à l'ID que l'on spécifiera et on en fait ce que l'on veut.
getElementsByClassName : On trouve tous les éléments qui ont la classe spécifiée
querySelector : On retourne le premier élément du document qui a le sélecteur demandé
querySelectorAll : On retourne tous les éléments qui ont le sélecteur demandé

En plus

Avec le onclick, on lance une fonction lorsque l'on clique sur l'élément correspondant

Demonstration

On a différents sélecteurs, lancer une fonction avec un clic sur l'élément, maintenant on peut s'amuser un peu avec. Regarde l'exemple :

Si tu cliques sur CET élément qui a un ID, la couleur changera.

Si tu cliques ici, cet élément là

Et celui ci

Pas celui là

Mais peut être celui là, changeront de couleur.

Si tu cliques ici, le premier élément du document de cette classe changera de couleur.

Par contre ici, ce sera tous les élements de cette classe qui changeront de couleur.


    <body>
    <p id="id-orange" onclick="anID()">Si tu cliques sur CET élément qui a un ID, la couleur changera.
    <p class="class-pink" onclick="someClasses()">Si tu cliques ici, cet élément là</p>
    <p class="class-pink">Et celui ci</p>
    <p class="class-blue">Pas celui là</p>
    <p class="class-pink">Mais peut être celui là, changeront de couleur.</p>
    <p class="class-blue" onclick="aQuerySelection()">Si tu cliques ici, le premier élément du document de cette classe changera de couleur.</p>
    <p class="class-blue" onclick="aQuerySelectionAll()">Par contre ici, ce sera tous les élements de cette classe qui changeront de couleur.</p>





C'est bien de sélectionner des éléments mais on en fait quoi ?

Dans dans l'exemple du dessus, on utilise javascript pour modifier le style des éléments que l'on a sélectionné(on a changé la couleur de fond).
On utilise un element.style et on définit le changement que l'on souhaite avec la propriété CSS.

Une autre manière de modifier le style, on peut ajouter aux éléments que l'on souhaite une classe. Pour l'exemple, on va réutiliser l'appel d'une fonction avec onclick pour voir la différence.

Pour l'instant, j'ai pas de classe mais quand tu cliqueras sur moi j'en aurais une.


    <p id="without-class" onclick="addClass()">Pour l'instant, j'ai pas de classe mais quand tu cliqueras sur moi j'en aurais une.</p>



Ainsi, de la même manière on peut supprimer une classe et la remplacer. On utilise le className ou le classList

On fait le point :

Ajouter une classe : .className += "laclasse" ou .classList.add('laclasse')
Plusieurs classes : même méthode mais on met un espace entre chaque classe
Modifier une classe : .className = "laclasse"
Supprimer une classe : .classList.remove('laclasse')

On oublie pas de sélectionner l'élément que l'on souhaite modifier avant !

On a déjà utilisé beaucoup de fois le clic, donc cette fois-ci tu auras juste à passer ta souris sur ce texte.


                
<p id="mouse-event" onmouseover="mouse()">On a déjà utilisé beaucoup de fois le clic, donc cette fois-ci tu auras juste à passer ta souris sur ce texte.</p>



On continue encore la modification !

Tu as compris la demonstration ?


Pour voir les différentes modifications que l'on apporte avec javascript, on est passé par onclick qui nous permet d'appeler une fonction avec un clic sur un élément précis. Mais qu'est ce que c'est réellement ?


Dans cet exemple, on réalise deux choses de manière différente : en premier, on modifie la taille du texte en passant notre souris dessus. En second, on modifie la couleur du texte en fonction que la souris soit sur le texte ou non.


Tout ce que nous faisons se produit grâce à la notion d'événement :

onclick : pour un clic sur l'élément
ondblclick : pour un double clic sur l'élément
onmouseover : pour le passage de la souris sur un élément
onmouseout : pour la sortie de la souris d'un élément
De nombreux autres événements existent...

Du coup, comment on s'occupe de ça ?

L'utilisation du .addEventListener nous permet de gérer les différents événements que l'on souhaite et déclencher des fonctions précises. On a la possibilité d'agir plusieurs fois si les événements se répètent.


Avec tous ces éléments, on a la possibilité de gérer une animation rapide :

Double clique pour que je puisse changer de forme !



Il est joli l'exemple mais on peut expliquer ?

Pour cette fois on joue avec les classes CSS qui donnent à notre box deux styles différents. Avec l'événement, on créé une fonction qui execute un changement de classe lors de l'appel de la fonction avec JS (ici avec un double clic).

On passe d'une classe à une autre à l'infini avec toggle. Même utilisation de classList qu'avec l'ajout ou la suppression, cette fois-ci on décide de basculer.

Petit plus ici, on rend le changement plus fluide avec des transitions CSS. Regarde à quoi ressemble le code :

(ici tu pourras pas cliquer parce que pour l'exemple d'avant on a utilisé un querySelector, as-tu bien retenu son cas d'utilisation ?)


    .box {
        width: 100px;
        height: 100px;
        background-color: blueviolet;
        transition: width 2s, height 2s, background-color 2s, transform 2s;
        margin: auto;
    
    }
    
    .rectangle {
        background-color: pink;
        width: 15px;
        height: 150px;
        transform: rotate(90deg);
        transition: width 2s, height 2s, background-color 2s, transform 2s;
        margin: auto;
    }    

Ok j'ai tout compris mais les fonctions trop compliquées ça fonctionne comment ?

Avec tous les éléments que l'on a vu, on peut comprendre le principe de certaines fonctions. On reprend l'exemple du changement de couleur de fond vu dans la première demonstration.


var x, i;
x = document.querySelectorAll(".class-pink");
for (i = 0; i < x.length; i++) {
x[i].style.backgroundColor = "pink";
}

On connait déjà le contenu des actions que l'on fait, maintenant il faut traduire chaque ligne.


On déclare des variables var pour y stocker des éléments, ici x et i.
On attribue alors à x les éléments que l'on souhaite avec notre querySelectorAll.


La partie qui semble compliquée, mais qui ne l'est pas lorsque l'on comprend toutes les conditions : on fait une boucle for avec la variable i que l'on peut considérer comme un compteur, qui commence à 0 jusqu'à la longueur "length" de notre x (pour rappel, qui contient nos éléments). Ce i s'incrémente avec le ++. Cette ligne d'aparence compliquée nous permet de créer la boucle afin d'effectuer la même action plusieurs fois pour tous les éléments que l'on souhaite.


Donc, pour tous les éléments que l'on a en x avec en propriété i, on effectue le changement de couleur


Moins facile que lorsque l'on a un seul élément, on automatise avec des fonctions. Pour notre compréhension, on peut changer ces lettres x et i par des mots concrets :



Tu l'as déjà vu mais cette fois si tu comprends qu'au clic de cet élément


Puisque la fonction va récupérer tous les éléments de cette classe et y appliquer le changement de style,


on sera tous coloré, j'espère que tout a été clair !