Cyrille Perois
Lead front-end developer @ Wandi Teaches front-end development @ IUT Paris Descartes
Programmation web - Client riche
Un événement, c'est quand il se passe quelque chose...
... sur un élément
click/ mouseover / mouseout /mousemove
focus / blur
submit
keydown / keyup
... sur le document
... sur le style d'un élément
... sur des requêtes réseau
const onClick = () => console.log("You clicked!")
element.addEventListener(
"click", // Type de l'événement
onClick // Fonction à exécuter
)
Pour pouvoir réagir à un événement, il nous faut :
Pour arrêter un gestionnaire d'événements sur un élément, on a besoin de :
const onClick = () => console.log("You clicked!")
element.addEventListener("click", onClick)
element.removeEventListener("click", onClick)
Lorsqu'une fonction associée à un gestionnaire d'événement est exécutée, elle reçoit automatiquement en premier paramètre un objet représentant l'événement déclenché
const element = document.querySelector(".js-element")
const onClick = (event) => {
console.log(event.type)
console.log(event.target)
console.log(event.currentTarget)
console.log(event.clientX)
console.log(event.clientY)
}
element.addEventListener("click", onClick)
Sur certains types d'éléments, le navigateur a un comportement par défaut pour un certain nombre d'événements :
Ces comportements peuvent être annulés grâce à la méthode preventDefault de l'objet Event
Lorsqu'on a beaucoup d'éléments sur lesquels on attache des événements, on a beaucoup de gestionnaires d'événements. On utilise donc beaucoup de mémoire...
Lorsque les éléments peuvent être supprimés / ajoutés dynamiquement, il faut gérer l'ajout et la suppression des gestionnaires d'événements, pour ne pas avoir de fuite mémoire...
Une solution est rendue possible par le bouillonnement des événements : attacher un gestionnaire sur un élément parent, et réagir aux événements seulement si la target nous intéresse.
La délégation d'événement est un pattern parfait lorsque :
Implémenter la délégation d'événement proprement en gérant tous les cas à la marge peut être fastidieux. ftdomdelegate gère tout ça très bien
By Cyrille Perois