flex中自定义组件的Click-outside事件

时间:2009-07-18 16:00:12

标签: flex actionscript-3 mxml

有没有办法编写当用户点击该自定义组件实例外部时触发的自定义事件?主要是Flex应用程序中的任何其他位置。 感谢。

4 个答案:

答案 0 :(得分:6)

您可以使用FlexMouseEvent.MOUSE_DOWN_OUTSIDE事件。例如:

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

答案 1 :(得分: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();
}

答案 2 :(得分:0)

从Senocular得到这个。我认为这适用于这个主题,至少它对我有用。 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 

答案 3 :(得分:-1)

Flex / Actionscript 3 - 在popup anchor

之外的任何地方点击鼠标关闭popupanchor

for 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/