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 qui survient 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 bien d'autres. Voir liste ci-dessous.
En d'autres termes on utilise les attributs événementiels du HTML.
Suivez les instructions !
Notez les attributs événementiels pour l'élément IMG : onmouseover, onclick, ... etc.
function f1() {image.src ='../images/femme_normale.jpg' ; } function f2() {image.src ='../images/femme_maigre.jpg' ; } function f3() {image.src ='../images/squelette.jpg' ; } function f4() {image.src ='../images/femme_grosse.jpg' ; }
La détection des événements par le HTML est une solution ancienne, toujours comprise par les navigateurs mais à éviter. En effet le mélange de code HTML et JS dans la partie BODY complique la lisibilité du code donc sa maintenance.
Suivez les instructions !
Plus aucune "scorie" JS dans la code de la partie BODY ; uniquement du HTML !
var page = document.getElementById('page') ; var boite = document.getElementById('boite') ; page.onload = function() {boite.style.backgroundImage ='url(../images/burkini.jpg )' ; } boite.onmouseover = function() {boite.style.backgroundImage ='url(../images/bikini2.jpg )' ; } boite.onclick = function() {boite.style.backgroundImage = 'url(../images/seins_nus.jpg )' ; } boite.ondblclick = function() {boite.style.backgroundImage = 'url(../images/jolie_fille.jpg )' ; } boite.onmouseout = function() {boite.style.backgroundImage ='url(../images/squelette.jpg )' ; } document.onkeydown = function() {boite.style.backgroundImage ='url(../images/brune_nue.jpg )' ; } document.onkeyup = function() {boite.style.backgroundImage = 'url(../images/black_nue.jpg )' ; }
Les événements sont détectés par le JS selon la méthode "onEvent" ; méthode intitulée ainsi
car tous les événements sont préfixés par "on".
Notez que les événements keydown, keypress & keyup sont relatifs à l'objet document.
Il existe désormais une solution plus moderne pour détecter les événements : la méthode addEventListener (écoute d'événement).
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.
Nous allons traiter ce thème avec les méthodes JS onEvent puis addEventListener".
Le code est complètement débarassé de "scories" JS (uniquement du HTML) et se résume à :
document.querySelector('button').onclick = function() { var nom = prompt('tapez votre nom') ; document.write("bonjour " + nom ); }
Tous les événements sont préfixés par "on" : onclick, onmouseover, onsubmit, onload, etc.
Le script est un peu plus lourd mais retourne beaucoup d'informations grâce au passage d'un argument : un objet de type "event".
La méthode addEventListener ajoute au gestionnaire d'événement l'écoute de l'événement d'où de terme "listener".
Les affichages précisent le type d'événement et l'élément de la page concerné.
L'emploi de la méthode addEventListener donne la 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 : clic sur le bouton de commande.
Nous allons évoquer maintenant deux évéments liés aux zones de saisie d'un formulaire.
focus : sélection d'un champ.
blur : fin de sélection du champ.
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".
Un objet "event" peut être passé à la fonction de traitement liée à la détection d'un événement.
Notez comment je produis du texte qui deviend ensuite le contenu de l'élémment H3.
Dans la première fonction j'ai nommé l' objet de type event "event", "e" dans la deuxième fonction ; "evt"
dans la troisième fonction ; "evenement" dans la quatrième fonction.
La quatrième fonction permet de modifier l'aspect de l'image alors que les trois précédentes se contentent de donner
des informations sur l'événement.
Si je clique sur l'image, je modifie son aspect : bordure et ombrage !
Notez 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.
var billard = document.querySelector('#billard'); // variables objet var boule = document.querySelector('#boule'); var x; var y ; // programmation des touches de direction document.onkeydown = function(event) { if (event.keyCode == 37) gauche(); if (event.keyCode == 39) droite() ; if (event.keyCode == 38) haut(); if (event.keyCode == 40) bas() ; } // fin fonction // quatre fonctions de déplacement function gauche() { x = getComputedStyle(boule).left; x = parseInt(x); x= x-20; x = x + "px"; boule.style.left = x ; } ... function haut() { y = getComputedStyle(boule).top; y = parseInt(y); y= y-20; y = y+"px"; boule.style.top = y ; } ...
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.