【问题标题】:Is it possible to capture events of internally created bing maps entities?是否可以捕获内部创建的必应地图实体的事件?
【发布时间】:2012-05-23 07:21:12
【问题描述】:

我正在使用必应地图 AJAX 控件 7.0

我想为作为行驶路线一部分的图钉添加自定义事件处理程序。

我知道如何将自定义事件添加到我自己创建并引用的映射实体。但是构成行驶路线的实体是在内部创建并自动添加到地图中的。有没有办法可以在添加到地图之前或之后附加事件处理程序?

具体来说,我想将自定义 onmouseover 事件添加到行驶路线上的航点图钉,以便在悬停时显示自定义图标。我已阅读建议通过PushpinOptions 中的typeName 属性将带有伪:hover 选择器的css 类添加到图钉,但这不起作用。 AJAX 控件本身使用 javascript 事件来更改鼠标悬停时的图标图像,因此在 :hover 上设置 background css 属性永远不会起作用,它会被默认的悬停图标覆盖。

我需要将自定义onmouseover 事件添加到驾驶航点图钉,以便我可以显示自定义图标并禁用默认行为。我该怎么做呢?谢谢。

【问题讨论】:

    标签: javascript bing-maps


    【解决方案1】:

    我能想到的唯一解决方案是检查驱动路线图钉的 HTML 输出并破解它们的事件冒泡。我检查了驱动路线图钉的 HTML,并且使用 V7 ajax api,它们的 id 似乎都以前缀 DDWaypointPushpin 开头。因此,hacky 的解决方案是在 DOM 中找到这些图钉并以某种方式覆盖它们的默认事件处理程序。例如,如果您想阻止图钉上 mouseover 事件的默认行为,您可以使用 jquery 匹配 id 字符串并绑定到 mouseover 事件,并防止它冒泡。

            $("div[id*='DDWaypointPushpin']").bind('mouseover', function (e) {
                //$(this) will match your pushpin div, do whatever you want with it
                // Stop the event from bubbling up, so the default MS mouseover behavior is prevented
                e.stopPropagation();
            });
    

    如果您想显示自定义图标,请在您的mouseover 处理程序中查找$(this) 下的<img> 元素,并将其src 属性更改为您喜欢的任何内容。

    【讨论】:

    • 博金,感谢您的帮助。我发现了一个更自然的解决方案,请在下面查看我的答案。不过感谢您的建议,它仍然是一个有趣的选择。
    【解决方案2】:

    我发现 PushpinOptions 对象有一个未记录的属性 - hoverIcon

    我在DirectionsManager 对象的directionsUpdated 事件中添加了一些代码,该对象遍历了地图上的实体。我查看了Waypoint 实体,发现它们同时具有_icon_hoverIcon 内部属性。由于PushpinOptions 中有一个icon 属性,我检查了是否也可以使用hoverIcon 属性,它可以!

    据我所知,hoverIcon 属性没有记录在案。但这是一种更简单的方法,并且可能是向图钉添加自定义悬停图像的正确方法。

    如果将此情况报告给 Micorsoft 会有所帮助,以便他们更新文档。我之前从未向 Microsoft 报告过文档错误,所以如果您知道执行此操作的最佳方法,请告诉我。

    【讨论】:

    • 嗯,很有趣,考虑到您想要实现的目标,您的解决方案可能是更合适的解决方案。
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多