[actionscript-3] Differenza tra e.target e e.currentTarget


Answers

e.target è ciò che innesca l'attivazione del dispatcher dell'evento e e.currentTarget è ciò a cui è stato assegnato il listener.

Question

Non capisco la differenza, sembrano entrambi uguali ma suppongo che non lo siano.

Qualsiasi esempio di quando usare l'uno o l'altro sarebbe apprezzato.




Vale la pena notare che event.target può essere utile, ad esempio, per utilizzare un singolo listener per attivare azioni diverse. Diciamo che hai il tipico sprite "menu" con 10 pulsanti all'interno, quindi invece di fare:

menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...

Puoi semplicemente fare:

menu.addEventListener(MouseEvent.CLICK, doAction);

E innesca un'azione diversa all'interno di doAction (evento) a seconda dell'evento.target (usando la sua proprietà name, ecc ...)




e.currentTarget restituirebbe sempre il componente su cui viene aggiunto il listener di eventi.

D'altra parte, e.target può essere il componente stesso o qualsiasi figlio diretto o nipote o pronipote e così via chi ha ricevuto l'evento. In altre parole, e.target restituisce il componente che si trova in cima alla gerarchia Elenco di visualizzazione e deve trovarsi nella gerarchia figlio o nel componente stesso.

Un uso può essere quando si dispone di diverse immagini nella tela e si desidera trascinare immagini all'interno del componente, ma su tela. Puoi aggiungere un listener su Canvas e in quel listener puoi scrivere il seguente codice per assicurarti che Canvas non venga trascinato.

function dragImageOnly(e:MouseEvent):void
{
    if(e.target==e.currentTarget)
    {
        return;
     }
     else
     {
        Image(e.target).startDrag();
     }
}



  • e.target è un elemento, su cui fai clic
  • e.currentTarget è un elemento con listener di eventi aggiunto.

Se si fa clic sull'elemento figlio del pulsante, è meglio utilizzare currentTarget per rilevare gli attributi dei pulsanti, in CH è talvolta possibile utilizzare e.target.




Links