2009-07-18 6 views

Antwort

6

Sie können das Ereignis FlexMouseEvent.MOUSE_DOWN_OUTSIDE verwenden. Zum Beispiel:

myPopup.addEventListener(
    FlexMouseEvent.MOUSE_DOWN_OUTSIDE, 
    function(mouseEvt:FlexMouseEvent):void 
    { 
     PopUpManager.removePopUp(myPopup); 
    } 
); 
+3

die FlexMouseEvent.MOUSE_DOWN_OUTSIDE jedoch ausgestrahlt wird nur, wenn Sie die Komponente mit dem Popupmanager hinzufügen, nicht, wenn Sie eine manuelle addChild tun (siehe http: //www.mail -archive.com/[email protected]/msg14875.html und sehe meine letzte Stunde Haare ziehen) – iddqd

2
stage.addEventListener(MouseEvent.CLICK, stgMouseListener, false, 0, true); 

... 

private function stgMouseListener(evt:MouseEvent):void 
{ 
    trace("click on stage"); 
} 


private function yourComponentListener(evt:MouseEvent):void 
{ 
    trace("do your thing"); 
    evt.stopPropagation(); 
} 
0

habe diese von Senocular. Ich denke, es trifft auf dieses Thema zu, zumindest hat es den Trick für mich getan. Was jedierikb vorgeschlagen scheint, scheint der gleiche zu sein, aber ein wenig unvollständig.

Ereignispropagierung Verhindern

Wenn Sie weitere Ausbreitung eines Ereignisses verhindern möchten, können Sie es zu tun, so in einem Ereignis-Listener mit stopPropagation() (flash.events.Event.stopPropagation()) oder stopImmediatePropagation stoppen() (flash.events.Event.stopImmediatePropagation()). Diese Methoden werden von den Ereignisobjekten aufgerufen, die an Ereignislistener übergeben werden, und stoppen das Ereignis im Wesentlichen - zumindest nach diesem Zeitpunkt.

stopPropagation verhindert, dass Objekte, die über den aktuellen Wert hinausgehen, das Ereignis empfangen, und dies kann in jeder Phase des Ereignisses erfolgen. stopImmediatePropagation macht dasselbe, aber auch den zusätzlichen Schritt, zusätzliche Ereignisse innerhalb des aktuellen Ziels zu verhindern, die das Ereignis ebenfalls empfangen. Wo also stopPropagation verhindern würde, dass das Elternelement von Sprite A das Ereignis empfängt, würde stopImmediatePropagation verhindern, dass das Elternelement von Sprite A und andere Listener, die das Sprite A hören, das Ereignis empfangen.

Beispiel: Umschalten zwischen der Verwendung von stopPropagation und stopImmediatePropagation Actionscript-Code:

var circle:Sprite = new Sprite(); 
circle.graphics.beginFill(0x4080A0); 
circle.graphics.drawCircle(50, 50, 25); 
addChild(circle); 

circle.addEventListener(MouseEvent.CLICK, clickCircle1); 
circle.addEventListener(MouseEvent.CLICK, clickCircle2); 
stage.addEventListener(MouseEvent.CLICK, clickStage); 

function clickCircle1(evt:MouseEvent):void { 
    evt.stopPropagation(); 
    // evt.stopImmediatePropagation(); 
    trace("clickCircle1"); 
} 
function clickCircle2(evt:MouseEvent):void { 
    trace("clickCircle2"); 
} 
function clickStage(evt:MouseEvent):void { 
    trace("clickStage"); 
} 

den Kreis klicken und sieht, wie das Ereignis mit jeder Methode gestoppt wird. stopPropagation verhindert die Bühne aus dem Empfang des Ereignisses während stopImmediatePropagation auch clickCircle2 verhindert, in Anerkennung der Ereignis

normale Ausgabe

clickCircle1 
clickCircle2 
clickStage 

stopPropagation Ausgang

clickCircle1 
clickCircle2 

stopImmediatePropagation Ausgang

clickCircle1 
Verwandte Themen