捕获容器上的mouseEevents,绕过其子容器

时间:2012-05-10 09:00:11

标签: flex flex4

我正在使用Flex 4.6构建一个RIA应用程序,其中包含一个主borderContainer(页面),它可以包含其他一些borderContainers(图形或文本元素)。

我在页面上添加了一个事件监听器来监听点击事件:

page.addEventListener(MouseEvent.CLICK, clickHandler, true);

clickHandler看起来像这样:

private function clickHandler(event:MouseEvent):void
{
    // Remove event listeners
    page.removeEventListener(MouseEvent.CLICK, clickHandler, true);

    // Get click position
    objX = event.localX;
    objY = event.localY;
}

我的问题是虽然事件的currentTarget始终是页面(正常),但目标可以是页面或其子项之一,然后localX不会给我在页面上但在子项上的位置。

有没有办法确保页面始终是事件的目标?有什么比停止页面上的捕获阶段所以它不会更深入?

提前感谢您的帮助

达雷尔

1 个答案:

答案 0 :(得分:1)

我想你可能会问错误的问题。据我了解,你想要x / y位置相对于'page'。您可以使用DisplayObject#globalToLocal()功能查找此内容。

只需获取全局坐标并将它们转换为相对于“page”的本地坐标:

var coordinates:Point = new Point(event.stageX, event.stageY);
coordinates = page.globalToLocal(coordinates);
objX = coordinates.x;
objY = coordinates.y;