【问题标题】:Google Maps Polyline CLICK Event谷歌地图折线点击事件
【发布时间】:2011-07-02 22:28:25
【问题描述】:

我正在实现一个地图应用程序。它使用 Google Maps API for Flash。单击地图时会触发一个回调函数。此外,还有大量动态生成的折线。折线还分配了单击事件侦听器。问题是当我单击折线时,首先触发地图单击事件,然后触发折线的单击事件。

我无法解决这个问题。真的很烦人。下面是为地图的点击事件分配回调的代码:

map = new Map();
map.key = GOOGLE_MAP_KEY;
map.addEventListener(MapMouseEvent.CLICK, onMapClicked, true);

下面是为折线的点击事件分配回调函数的代码:

var polyline:Polyline = new Polyline(path);
polyline.addEventListener(MapMouseEvent.CLICK, cutToEnd);

当我单击折线时,我需要抑制“onMapClicked”函数的调用。只应调用“cutToEnd”方法。

谢谢

【问题讨论】:

    标签: apache-flex google-maps google-maps-api-3 maps polyline


    【解决方案1】:
    map.addEventListener(MapMouseEvent.CLICK, onMapClicked, true);
    

    您在此处使用 bubblingPhase(第三个“true”参数)。这意味着,当您单击折线时,事件首先“到达”您的地图,因为它正在从舞台捕获到您的按钮。设置参数“false”,或者只保留2个参数(useCapture默认为“false”)。然后在您的折线单击处理程序的末尾添加event.stopPropagation() 方法调用。它会使事件停止冒泡,并且不会“到达”您的地图。

    UDATE:如果 MapMouseEvent 没有冒泡,您可以比较 event.targetevent.currentTarget 属性。在您的折线点击侦听器中,它们将是相等的。所以你可以添加

     if(event.target != event.currentTarget)
        return;
    

    在地图点击监听器的开头。

    【讨论】:

    • 感谢您的帮助。我认为它不起作用。首先,我从所有“addEventListener”调用中删除了第三个参数。然后,我在“cutToEnd”方法的末尾添加了“event.stopPropagation()”。此外,我在“onMapClicked”的开头添加了目标的比较。我正在调试它,它总是说“event.target”=“event.currentTarget”。 “onMapClicked”总是首先被调用。我错过了什么吗?
    • 在显示列表中,地图和折线似乎不在父子关系中
    猜你喜欢
    • 2016-03-05
    • 2018-05-01
    • 2016-05-30
    • 2013-04-04
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多