Событие Click-outside для пользовательских компонентов в flex - PullRequest
3 голосов
/ 18 июля 2009

Есть ли способ написать пользовательское событие, которое запускается, когда пользователь щелкает за пределами этого экземпляра пользовательского компонента? В основном где-нибудь еще в основном приложении Flex. Спасибо.

Ответы [ 4 ]

6 голосов
/ 18 июля 2009

Вы можете использовать событие FlexMouseEvent.MOUSE_DOWN_OUTSIDE. Например:

myPopup.addEventListener(
   FlexMouseEvent.MOUSE_DOWN_OUTSIDE,
   function(mouseEvt:FlexMouseEvent):void
   {
       PopUpManager.removePopUp(myPopup);
   }
);
2 голосов
/ 18 июля 2009
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 голосов
/ 14 декабря 2013

Flex / Actionscript 3 - закрыть всплывающее окно при щелчке мышью в любом месте за пределами всплывающего якоря

для 4.6 SDK попробуйте ..

frmPUA.popUp.addEventListener (FlexMouseEvent.MOUSE_DOWN_OUTSIDE, menuPopOutside, false, 0, true);

Полный код доступен на

http://saravanakumargn.wordpress.com/2013/12/14/flexactionscript-3-close-popupanchor-on-mouse-clicked-anywhere-outside-popup-anchor-2/

0 голосов
/ 06 мая 2012

Получил это от Сенокуляр. Я думаю, что это относится к этой теме, по крайней мере, это помогло мне. То, что предложил jedierikb, кажется таким же, но немного неполным.

Предотвращение распространения событий

Если вы хотите предотвратить дальнейшее распространение события, вы можете остановить его в слушателе событий, используя stopPropagation () (flash.events.Event.stopPropagation ()) или stopImmediatePropagation () (flash.events.Event .stopImmediatePropagation ()). Эти методы вызываются из объектов Event, передаваемых в прослушиватели событий, и по существу останавливают событие, по крайней мере, после этой точки.

stopPropagation не позволяет никаким объектам, находящимся за пределами тока, получать событие, и это может происходить в любой фазе события. stopImmediatePropagation делает то же самое, но также предпринимает дополнительный шаг, предотвращая появление дополнительных событий в пределах текущей цели, получающих событие. Поэтому, так как stopPropagation не позволяет родительскому элементу спрайта A получать событие, stopImmediatePropagation не позволяет родительскому элементу спрайта A, а также другим слушателям, слушающим спрайт A, получать событие.

Пример: переключение между использованием stopPropagation и stopImmediatePropagation Код ActionScript:

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");
}

Нажмите на кружок и посмотрите, как событие останавливается с каждым методом. stopPropagation не позволяет сцене получить событие, а stopImmediatePropagation также не позволяет clickCircle2 распознать событие

нормальный выход

clickCircle1
clickCircle2
clickStage

выход StopPropagation

clickCircle1
clickCircle2

выход stopImmediatePropagation

clickCircle1 
...