Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site
JS est un langage événementiel : il détecte un évènement et qui survient dans la page et lance un traitement.
Un événement est quelque chose qui se produit dans le navigateur ou encore une action de l'utilisateur.
Le clic (click en anglais) est l'événement le plus courant mais il y a d'autres :
focus, blur, change, load, mouseover, unload, submit, key, etc.
Pour la détection des évènements on peut utiliser le HTML ou le JavaScript.
C'est la solution historique mais dépassée car elle présente des inconvénients.
Suite à un clic sur un bouton de commande le visiteur peut saisir son nom et en retour il y a affichage d'un message de bienvenue.
Le script est intégré dans le code HTML et appelé via un attribut événementiel de l'élément HTML concerné.
Donc l'évènement est détecté par le code HTML grâce à l'ajout d'un attribut événementiel.
Le rendu de ce code :
Notez que tous les évènements commencent par le préfixe "on" et que ces attributs, conformément à la syntaxe HTML, doivent
être écrits en minuscules.
La valeur de l'attribut événementiel doit être entre guillemets double. Il faut donc utiliser des guillemets simples pour délimiter les chaines.
En effet en HTML le caractère d'échappement (antislash) n'est pas autorisé.
Il est plus simple de déporter le code JS dans une fonction comme je fais ci-dessous.
Le rendu du code amélioré :
Le rendu est strictement identique mais la maintenance du code sera plus facile.
Cependant le code HTML fait encore référence au script ; ce qui est contraire au principe de séparation de la présentation et des traitements.
Il y a alors une stricte séparation entre la présentation (en HTML) et le traitement (en JS).
Reprenons le même thème !
Le code HTML est complètement débarassé de toute "scories" JS.
Ici il se résume à :
La syntaxe est : élément.onevent = code document.querySelector('button').onclick = function() { var nom = prompt('tapez votre nom') ; alert("bonjour " + nom );}
Notez l'emploi ici d'une fonction anonyme.
Tous les événements sont préfixés par "on" et sont écrits en minuscules : onclick, onmouseover, onsubmit, onload, etc.
Pour cibler l'élément de la page, privilégiez les méthodes querySelectorAll() & querySelector() qui
sont argumentées avec un sélecteur CSS plutôt que les anciennes méthodes telles getElementById(), getElementByName(), etc.
Le rendu de ce code :
L'emploi du gestionnaire d'évènements JS offre un autre avantage : possibilité d'utiliser l'objet event que nous évoquerons bientôt.
La syntaxe est alors : élément.addEventListener('évènement',fonction)
Les instructions qui s'affichent dans la console du navigateur sont provisoires.
Le rendu de ce code :
La console précise le type d'évènement et l'élément de la page concerné.
La méthode addEventListener ajoute au gestionnaire d'évènement l'écoute de l'évènement d'où de terme "listener".
Un objet de type "Event" peut être passé en argument de la fonction.
L'emploi de la méthode addEventListener donne une syntaxe un peu plus lourde mais offre un gros avantage : possibilité d'associer sur un même élément et pour le même évènement, plusieurs fonctions.
On associe au bouton de commande deux fonctions : une pour la saisie de variables et une autre pour l'affichage des variables.
Ces deux fonctions sont liées au même élément sur le même évènement.
Le rendu de ce code :
Ce sont des évènements très utilisés dans les formulaires avec les champs de saisie.
Grâce à ce script il y a un contrôle de saisie sur le premier input du formulaire.
Nous voyons une bonne illustration de deux évènements liés aux champs de formulaire : focus et blur.
Ici un message ('le séparateur décimal ...) s'affiche dès que le curseur pointe le premier input (onfocus). Dès que cette zone de saisie n'est plus
pointée (onblur) un test est effectué pour afficher un second message "erreur de saisie" ou "saisie correcte".
Notez l'emploi du mot this qui est très pratique et qui fait référence à l'objet en cours d'utilisation ; ici le premier input.
Donc le mot this remplace ici : document.querySelector('input').
Un objet "event" peut être passé à la fonction de traitement liée à la détection d'un évènement.
Le code HTML est débarassé des attributs événementiels.
Le code JS est centralisé en un seul script.
Dans la première fonction j'ai nommé l' objet event "event", "e" dans la deuxième fonction, "evt" dans la troisième fonction et
"evenement" dans la quatrième.
La quatrième fonction permet de modifier l'aspect de l'image.
Le rendu dans un nouvel onglet
Si je clique sur l'image, je modifie son aspect : bordure et ombrage !
Remarquez que les touches de direction du clavier ont un code ASCII compris entre 37 et 40 inclus.
A l'occasion de l'exemple précédent, vous avez pu noté que le code ASCII des touches directionnelles est compris entre 37 et 40.
Théme : grâce aux touches directionnelles, vous devez déplacer la boule du billard.
Il est d'une simplificité déroutante ...
Une boîte identifiée billard contient une boule. C'est cet élément qu'il faut déplacer avec le clavier.
Pour dessiner un rond il faut appliquer la propriété de style border-radius à une boîte carrée !
Deux fonctions affichées sur quatre.
Les quatre touches du pavé directionnel sont programmées. Si appui sur l'une de ces touches appel d'un des quatre fonctions.
Deux fonctions pour changer la valeur de la propriété left de l'objet boule et deux fonctions pour augmenter ou diminuer la valeur de la
propriété top.
La méthode getComputedStyle avec la propriété top/left retourne une chaîne telle "90px". Il faut donc convertir en entier
puis incrémenter (ou décrémenter) puis rajouter "px". Bref c'est un peu lourd.
La boule peut sortir du billard. Mais ça ne serait pas très compliqué d'éviter cela. Il suffirait d'un test.