4

如何仅禁用bing 地图 AJAX 控件 7.0 的平移抓取方面?

我试过这个 -

var map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), { credentials: "bing maps credentials", mapTypeId: Microsoft.Maps.MapTypeId.road, disablePanning: true});

但是disablePanning在地图选项中设置属性不仅会禁用抓取平移,还会禁用缩放平移。缩放不会完全禁用,而是只会在地图中心放大和缩小。毫无疑问,您会遇到缩放平移,您可以使用鼠标滚轮放大光标下的地图,因此可以通过放大和缩小以及移动光标来平移。我想启用缩放平移,但要禁用抓取平移(用户按下鼠标并拖动它)。

我的目标是实现与在主 bing 地图站点上使用我的位置编辑器时非常相似的功能。当使用折线工具在地图上绘制时,抓取平移被禁用,缩放平移被启用,就像我想要的那样。我实际上打算在我的位置编辑器中创建一个类似于折线工具的自定义绘图工具。

我一直在研究 api,但还没有发现如何去做。我也试图发现它是如何在主要的 bing 地图网站上完成的,但由于 javascript 代码被全部缩小,我发现它非常困难。我设法发现折线工具劫持了鼠标,但仅此而已。

当然,必须有一个简单的方法来做到这一点。它是如何完成的?

4

1 回答 1

5

我认为没有可以设置的地图选项来实现您想要的行为(启用缩放平移/禁用抓取平移)。但是,有一种简单的方法可以破解它。通过用户在地图上单击并移动鼠标来启动平移。因此,如果您可以为地图提供自己的mousedown事件处理程序,并在其实现中防止 的默认行为mousedown,那么您应该很高兴。事实证明,handled属性MouseEventArgs就是这样做的:

Microsoft.Maps.Events.addHandler(yourMapObj, 'mousedown', function (mouseEvent) {
    mouseEvent.handled = true; //A boolean indicating whether the event is handled. If this property is set to true, the default map control behavior for the event is cancelled.
}); 

这样,mousedown地图上的事件将由您处理并被地图忽略。因此,当用户尝试使用鼠标平移地图时,什么也没有发生。他们仍然可以像往常一样单击和缩放。请记住,如果地图上有其他元素,例如图钉和形状,这将阻止mousedown事件到达它们。因此,您在其上注册的任何mousedown事件处理程序都不会被调用。mousedown当您希望调用其他事件(首选)时,您可以通过取消注册上述处理程序来处理此问题,或者询问您的目标属性MouseEventArgs以查看触发 mousedown(混乱)的原因。

于 2012-04-30T01:24:44.667 回答