Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-01-2009, 20:01   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2007
Beiträge: 246
event.target und event.currentTarget

hallo,

tut mir leid, hab gesucht, aber nix gefunden bzw. es nich verstanden.

kann mir wer den unterschied zwischen event.target und event.currentTarget erklären??
__________________
vielen Dank,
Fellkneul
Fellkneul ist offline   Mit Zitat antworten
Alt 12-01-2009, 20:08   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.587
Event
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 12-01-2009, 20:10   #3 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Wenn ein Event durch die DisplayList bubblen kann, wandert sie durch die DisplayLst Hierarchie. Bis sie am Dispatcher gelandet ist, "besucht" es alle DisplayList vor- und/oder nachher (useCapture = (false | true)). Diese Stationen sind dann in der currentTarget Property referenziert.

Event.target ist die dispatchende IEventDispatcher Instanz.
Omega Psi ist offline   Mit Zitat antworten
Alt 12-01-2009, 20:20   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Ein nicht ganz so gutes Beispiel... event.target und event.currentTarget fallen zusammen. Und wieso sollte event.target nicht so genau sein?
Omega Psi ist offline   Mit Zitat antworten
Alt 12-01-2009, 21:43   #5 (permalink)
I'M A CYBORG
 
Registriert seit: Apr 2007
Ort: ---------
Beiträge: 399
ja leider sehr falsches Beispiel habs wohl auch falsch verstanden .
habe es schon gelöscht.


currentTarget: Das Objekt, das den Ereignis-Listener definiert, der das Ereignis übernimmt.
Wenn Sie beispielsweise myButton.addEventListener() zur Registrierung eines Ereignis-Listeners verwenden,
weist currentTarget den Wert myButton auf.

target Das Objekt, von dem das Ereignis ausgelöst wurde. Dies ist nicht immer das Objekt, das auf das Ereignis wartet.
Verwenden Sie die Eigenschaft currentTarget, damit immer auf das Objekt, das auf das Ereignis wartet, zugegriffen wird.

Geändert von speedhost (13-01-2009 um 04:26 Uhr)
speedhost ist offline   Mit Zitat antworten
Alt 13-01-2009, 22:38   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
Genau!
So lässt es sich erklären.
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de
medianetic ist offline   Mit Zitat antworten
Alt 13-01-2009, 23:35   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Wenn mir jemand erklären kann, wie diese Erklärung auf Instanzen angewendet wird, die bubbling nicht unterstützen -> kein Event.currentTarget.

Event.currentTarget verwenden, wenn man bei bubblenden Objekten identifizieren muss, in welchem Zweig/Tiefe ein Listener aufgerufen wird. Sonst besser mit Event.target arbeiten. Event.currentTarget bietet sich vor allen Dingen bei Composites an, wenn beispielsweise das Event.target gekapselt und nicht öffentlich zugänglich ist.
Omega Psi ist offline   Mit Zitat antworten
Alt 13-01-2009, 23:40   #8 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
> Wenn mir jemand erklären kann, wie diese Erklärung auf Instanzen angewendet wird, die bubbling nicht unterstützen

Das wären dann ...?

Ja, und die Erde ist auch eine Scheibe, nicht wahr? Wer das Gegenteil behauptet gehört auch auf den Scheiterhaufen, oder?
Einfach ist, wenn man stimmige Erklärungen zu komplizierten Sachverhalten kritisiert - dann mach es doch einfach besser!

Ausnahmen bestätigen die Regel!
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de

Geändert von medianetic (14-01-2009 um 00:05 Uhr)
medianetic ist offline   Mit Zitat antworten
Alt 14-01-2009, 00:12   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Man kann sich das Leben auch echt schwer machen... vor allen Dingen, wenn man sich die einfachen Sachverhalte unnötig verkompliziert.

Und sobald man mal mit dem dritten Parameter useCapture rumspielt merkt man, das Event.curretTarget nicht zur Identifizierung des Dispatchers gemacht ist...

Aber wie dem auch sei... wenn es für dich stimmig ist... dann wird dass wohl so sein...
Omega Psi ist offline   Mit Zitat antworten
Alt 14-01-2009, 00:27   #10 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
Ich habe so eine 'Idee' ;-p und habe die Vermutung, dass da nicht mehr allzu viel kommt ...

Sonst erklär uns doch mal verständlich, wie man target und currentTarget allgemeingültig verwendet (Sollte für Dich kein Problem sein?)
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de

Geändert von medianetic (14-01-2009 um 00:56 Uhr)
medianetic ist offline   Mit Zitat antworten
Alt 14-01-2009, 09:09   #11 (permalink)
industry painter
 
Benutzerbild von edding950
 
Registriert seit: Aug 2006
Ort: auf'm Pott
Beiträge: 763
Du hast vergessen, 'bitte' zu sagen

Event.target ist für den Dispatcher bestimmt und Event.currentTarget kann von überall aus ermittelt werden - so zumindest mein eher semiprofessionelles Verständnis davon.
__________________
mfg.
edding950 ist offline   Mit Zitat antworten
Alt 14-01-2009, 11:25   #12 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Ich mache dir gerne ein Beispiel fertig - kein Problem.

Ist ja für mehrere interessant... heute Abend schreibe ich dir gerne ein nettes Tutorial.
Omega Psi ist offline   Mit Zitat antworten
Alt 14-01-2009, 19:21   #13 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.278
Zitat:
Zitat von medianetic Beitrag anzeigen
> Wenn mir jemand erklären kann, wie diese Erklärung auf Instanzen angewendet wird, die bubbling nicht unterstützen

Das wären dann ...?
Alle Instanzen von Klassen, die keine DisplayObjekte sind (EventDispatcher, URLLoader, diverse AIR Klassen, FileReference....). Ein einfacher Blick in die API Dokumentation hätte gereicht. So viel zu dem Thema.
Code:
  1. package
  2. {
  3.  
  4.     import flash.display.Graphics;
  5.     import flash.display.Sprite;
  6.     import flash.events.Event;
  7.     import flash.events.MouseEvent;
  8.     import flash.utils.getQualifiedClassName;
  9.  
  10.     public class DisplayList extends Sprite
  11.     {
  12.  
  13.         private var _child:Sprite;
  14.         private var _counter:int = 1;
  15.         private var _parent:Sprite;
  16.         private var _root:Sprite;
  17.  
  18.         public function DisplayList()
  19.         {
  20.             super();
  21.             initialize();
  22.         }
  23.  
  24.         protected function drawSquare(graphics:Graphics, size:Number,
  25.                 color:int = 0x0):void
  26.         {
  27.             graphics.beginFill(color);
  28.             graphics.drawRect(0, 0, size, size);
  29.             graphics.endFill();
  30.         }
  31.  
  32.         private function eventListener(event:Event):void
  33.         {
  34.             trace(getQualifiedClassName(this) + ".eventListener");
  35.             switch(event.type)
  36.             {
  37.                 case MouseEvent.CLICK:
  38.                     trace("\t", "Listener visited " + _counter + " times.");
  39.                     _counter++;
  40.                     if (event.currentTarget == _root) _counter = 1;
  41.                     break;
  42.             }
  43.         }
  44.  
  45.         protected function initialize():void
  46.         {
  47.             _child = new Sprite();
  48.             _child.addEventListener(MouseEvent.CLICK, eventListener);
  49.             drawSquare(_child.graphics, 50, 0x0000FF);
  50.             _parent = new Sprite();
  51.             _parent.addEventListener(MouseEvent.CLICK, eventListener);
  52.             _parent.addChild(_child);
  53.             drawSquare(_parent.graphics, 100, 0xFF0000);
  54.             _root = new Sprite();
  55.             _root.addEventListener(MouseEvent.CLICK, eventListener);
  56.             _root.addChild(_parent);
  57.             drawSquare(_root.graphics, 200, 0x0);
  58.             addChild(_root);
  59.         }
  60.     }
  61. }
Wenn man das gezeigte Beispiel kompiliert, wird der Listener bis zu 3 mal aufgerufen.

Was nun das eigentliche Problem ist: wenn du pauschaul auf Event.currentTarget testest und nicht intendierst das bubbling auszunutzen, kann es zu Seiteneffekten kommen, die nicht beabsichtigt sind. Das nachfolgende Beispiel illustriert die Problematik. fs.display::Sprite wird einfach erzeugt und in die DisplayList Instanz eingehangen. Jedoch haben beide einen EventListener für MouseEvent.CLICK registriert. Klickt man nun die Sprite Instanz, wird auch der Listener in der DisplayList Instanz aufgerufen. Wenn du nur auf Event.currentTarget testest... hast du nichts gewonnen.
Code:
  1. package
  2. {
  3.  
  4.     import flash.display.Sprite;
  5.     import fs.display.Sprite;
  6.     import flash.events.Event;
  7.     import flash.events.MouseEvent;
  8.     import flash.utils.getQualifiedClassName;
  9.  
  10.     public class DisplayList extends flash.display.Sprite
  11.     {
  12.  
  13.         private var _child:fs.display.Sprite;
  14.  
  15.         public function DisplayList()
  16.         {
  17.             super();
  18.             initialize();
  19.         }
  20.  
  21.         private function eventListener(event:Event):void
  22.         {
  23.             trace(getQualifiedClassName(this) + ".eventListener");
  24.         }
  25.  
  26.         protected function initialize():void
  27.         {
  28.             addEventListener(MouseEvent.CLICK, eventListener, true);
  29.             _child = new fs.display.Sprite();
  30.             addChild(_child);
  31.         }
  32.     }
  33. }
Code:
  1. package fs.display
  2. {
  3.     import flash.display.Graphics;
  4.     import flash.display.Sprite;
  5.     import flash.events.Event;
  6.     import flash.events.MouseEvent;
  7.     import flash.utils.getQualifiedClassName;
  8.  
  9.     public class Sprite extends flash.display.Sprite
  10.     {
  11.  
  12.         public function Sprite()
  13.         {
  14.             super();
  15.             initialize();
  16.         }
  17.  
  18.         protected function drawSquare(graphics:Graphics, size:Number,
  19.                 color:int = 0x0):void
  20.         {
  21.             graphics.beginFill(color);
  22.             graphics.drawRect(0, 0, size, size);
  23.             graphics.endFill();
  24.         }
  25.  
  26.         private function eventListener(event:Event):void
  27.         {
  28.             trace(getQualifiedClassName(this) + ".eventListener");
  29.         }
  30.  
  31.         protected function initialize():void
  32.         {
  33.             addEventListener(MouseEvent.CLICK, eventListener);
  34.             drawSquare(graphics, 100);
  35.         }
  36.     }
  37. }
Omega Psi ist offline   Mit Zitat antworten
Alt 14-01-2009, 21:34   #14 (permalink)
I'M A CYBORG
 
Registriert seit: Apr 2007
Ort: ---------
Beiträge: 399
Ich habe mir ebenfalls ein TestBrogramm gezimmert an dem man die verschiedenen Reaktionen von target und currentTarget an einem MovieClip der als childObject einen Button enthällt erkennen kann.

Target_test.fla
speedhost ist offline   Mit Zitat antworten
Alt 17-01-2009, 20:58   #15 (permalink)
Neuer User
 
Registriert seit: Oct 2004
Ort: Berlin
Beiträge: 478
Danke, nett.

Nur als Anmerkung gedacht:

Die ursprüngliche Frage war: 'kann mir wer den unterschied zwischen event.target und event.currentTarget erklären'

Es ist sicher gut! auf vermeindlich 'komplexe' Zusammenhänge diesbezügliuch einzugehen.
Schon eine Idee, wohin die Richtung geht?

Ausnahmen zu einer Vereinfachung von Zusammenhängen zu formulieren ist immer sehr einfach. (Dann sag mal was und ich geb Dir eine Ausnahme!) .Etwas allgemeingültig mit einem Satz zu formulieren hingegen nicht! Ich mag mich täuschen, aber mehr als ein Beispiel für eine vereinfachte Ausnahme hast Du nicht gezeigt, oder?

... was sehr weit davon entfernt wäre eine einfache Erklärung zwischen dem Unterschied von target und currentTarget, zu beschreiben.
(Hatte Dich so verstanden, dass dies gar kein Problem wäre und das man es sich nicht unnötig schwer machen sollte?)

PS: Nein? Ok dann lese ich gerne den folgenden Satz ...
__________________
Adobe Flash CS5: Das Handbuch
Webdesign und Webentwicklung: medianetic

Gesendet von meinem Windows-PC.
Blog-relaunch: http://www.blog.medianetic.de

Geändert von medianetic (17-01-2009 um 21:25 Uhr)
medianetic ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele