Bien que d'apparence plus verbeuse, la gestion des events en AS 3.0 est bien plus souple et adaptable que ce qu'elle ne l'était en AS 2.0. Elle est basée sur un modèle évènementiel appelé DOM 3 Event Model. Voici la signature de la mise en place d'un écouteur
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
objet.addEventListener("evenement", ecouteur);
- Détails du package flash.events
AS 3.0 intègre la notion de propagation évènementielle, qui se décompose en 3 phases
- La capture de l'évènement (useCapture true / false)
- La cible
- La remontée
informations transmises
currentTarget vs target - (type)
function affiche_infos(evt:MouseEvent):void {
sortie.text = "CT = " + evt.currentTarget.name
sortie.appendText( "\nT = " + evt.target.name)
}
bleu.addEventListener(MouseEvent.MOUSE_DOWN,affiche_infos)
vert.addEventListener(MouseEvent.MOUSE_DOWN,affiche_infos)
useCapture
this.haut.addEventListener(MouseEvent.MOUSE_DOWN,action,true)
this.bas.addEventListener(MouseEvent.MOUSE_DOWN,action,false)
function action(evt:MouseEvent):void {
sortie.text = "Target : " + evt.target.name
sortie.appendText("\ncurrentTarget : " + evt.currentTarget.name)
}
Soucis de détection rollover et rollout lorsque des enfants sont imbriqués
Lorsqu'un écouteur est placé sur un conteneur et que celui-ci contient des enfants... il est assez complexe de pouvoir détecter lorsque la souris quitte réellement l'ensemble... le mouse_out est capturé même lorsque la souris survole un enfant du conteneur... Il existe pour cela roll_out, voir l'article rollOver/rollOut vs mouseOver/mouseOut de Cédric Tabin sur AStorm Devblog à ce sujet.






