Gestión de eventos: Diferencia entre target y currentTarget

Gestión de eventos: Diferencia entre target y currentTarget

Etiquetas: numChildren getChildAt target currentTarget

Imagen en reemplazo de flash
Para explicar la diferencia entre ambas propiedades, voy a poner un ejemplo práctico. Tenemos un clip llamado Menu_mc, que tiene dentro otros 3 clips que hacen de botones. Si añadimos el evento "click" a Menu_mc, en la función que se ejecute (poniendo como parámetro e:MouseEvent) obtendremos los siguientes resultados:

  • Si hacemos trace(e.target.name), se imprimirá al nombre del clip pulsado (que está dentro de Menu_mc)

  • Si hacemos trace(e.currentTarget.name), se imprimirá el nombre del menú, es decir, "Menu_mc".

    Por tanto, cuando queremos programar un menú, no hace falta añadir los listeners uno a uno a los botones, podemos añadir el listener al menú, y aprovechar la propiedad target para ver que elemento ha sido pulsado.

    1. //En este ejemplo tengo un clip llamado Menu_mc, que contiene tres clips que hacen de botones. 
    2. //Dentro de cada uno de estos clips he declarado una variable llamada Numero, a la que accedo 
    3. //desde la función del evento. 
    4.  
    5.  
    6. function VerNumero(e:MouseEvent) {
    7. 	//Enciendo todos los botones
    8. 	for (var i:uint=0; i < Menu_mc.numChildren; i++) {
    9. 		Menu_mc.getChildAt(i).alpha = 1;
    10. 	}
    11. 	//Apago el botón elegido
    12. 	e.target.alpha = 0.5;
    13. 	Texto_txt.text = "Boton elegido: " + e.target.Numero;
    14. }
    15.  
    16. Menu_mc.addEventListener(MouseEvent.CLICK,VerNumero);

    Descargar archivos

    Comentarios
      • Autor
      • Mike Morales
      Hola que tal estuve leyendo tus post, pero vengo a robarte un poco de tu tiempo si no es mucha molestia.. y es la siguiente tengo una pelicula llamada MAin.swf y dentro de ella tengo una funcion llamada Juanito y dentro de Main mando llamar a Pedrito.swf pero necesito llamar desde Pedrito.swf a la funcion Juanito dentro de Main tienes alguna idea de como puedo hacer esto... muchas gracias por tu tiempo!!!
      • Autor
      • Savargas
      e.target.Numero Numero, no encuentro ayuda en as3 sobre la propiedad Numero. Podrías ayudarme?
      • Autor
      • Savargas
      e.target.Numero Numero, no encuentro ayuda en as3 sobre la propiedad Numero. Podrías ayudarme?
      • Autor
      • Pablo
      Hola como estás??? muy interesante el post, los estoy leyendo a todos y me encantan la verdad está todo muy fácil de entender... a ver si me podés ayudar a encontrar una solucion a mi problema con un menú cuando necesito desabilitar uno de los botones del mismo, por ej. supongamos q el menu tiene 3 items empresa, staff y home, hice el menu como lo explicaste muy bien vos y anda de 10 pero lo q quiero lograr ahora es desabilitar el boton "home" cuando estoy en la home me explico??? me pasé una hora probando con mouseChildren, mouseEnabled, etc, etc pero nada no logro hacer... Desde ya mil gracias y seguí así!
      • Autor
      • ¡g
      Que bueno, de esta forma así hasta se pueden hacer botones con simples sprites. para savargas: //Dentro de cada uno de estos clips he declarado una variable llamada Numero
      • Autor
      • Luis Miguel
      //MIKE ACA LA RESPUESTA A TU DUDA ///////////////////////////////////////////// //TENGO DOS SWF LLAMADOS JUAN.SWF Y PEDRO.SWF //SIENDO JUAN.SWF EL ARCHIVO BASE //ASIGNO LA CLASE MAIN A JUAN.SWF /////////////////////////////////////////// //CODIGO DENTRO DE MAIN package { //Importo las clases necesarias import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.net.URLRequest; public class Main extends Sprite { //Asigno la url que se va a cargar var url:String = "pedro.swf"; public function Main() { CargarSwf(); } //Carga el swf public function CargarSwf() { //Creo el objeto cargador var loader:Loader = new Loader(); //Le añado los listeners ponerListeners(loader.contentLoaderInfo); //Creo el objeto que contendrá la petición var peticion:URLRequest = new URLRequest(url); //Cargo la petición loader.load(peticion); } //Añade los listeners al cargador public function ponerListeners(d:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, cH); } //Funcion que se ejecuta cuando termina la descarga. public function cH(event:Event):void { trace("completeHandler: " + event); addChild(event.target.content); event.target.content.holaPedro(); } public function holaJuan() { trace("hola juan"); } } } //FIN DE CODIGO DENTRO DE MAIN //////////////////////////////////// //////////////////////////////////// //CODIGO DENTRO DE PEDRO.SWF import Main; function holaPedro() { trace("hola Pedro"); ////////////////////////////////////////////////////// ///////////////ACA ESTA LO QUE BUSCAS///////////////// ////////////////////////////////////////////////////// Main(parent).holaJuan(); ////////////////////////////////////////////////////// ///////////////ACA ESTA LO QUE BUSCAS///////////////// ////////////////////////////////////////////////////// } //FIN DE CODIGO DENTRO DE PEDRO.SWF ////////////////////////////////////
      • Autor
      • Luis Miguel
      bueno salio todo mal xP... pero bueno en conclusion tienes llamar desde Main a una funcion de pedro.swf y en pedro.swf tienes que ////importar Main///// y dentro de la funcion poner /////Main(parent).mi_funcion_en_main();/////
      • Autor
      • lm
      O SI NO ESTAS USANDO CLASES SIMPLEMENTE NO IMPORTAS MAIN... Y SOLO PONES DENTRO DE LA FUNCION MovieClip(parent).mi_funcion_en_main();
      • Autor
      • Jost
      Muy, pero muy útil tu información... Gracias.
    Dejar un comentario
    Tu nombre (obligatorio):

    E-mail (obligatorio, no se mostrará):

    Web:

    Comentario: