有没有办法编写当用户点击该自定义组件实例外部时触发的自定义事件?主要是Flex应用程序中的任何其他位置。 感谢。
答案 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
之外的任何地方点击鼠标关闭popupanchorfor 4.6 SDK试试这个..
frmPUA.popUp.addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE,menuPopOutside,false,0,true);
完整代码可在
获得