如何在Bing Maps 7.0中实现“缩放”和“拖动”功能?

时间:2013-09-06 16:07:27

标签: javascript-events event-handling zoom drag bing-maps

我正在开发一个使用Bing map 7.0的Web应用程序。我想知道是否有办法将函数绑定到Map类事件,该事件在地图拖动缩放时进行侦听。从我在文档中看到的,Map类的 viewchangeend 事件接近我正在寻找的事件,但是在我不特别想要考虑的情况下调用此事件,例如如果我使用jQuery或在地图创建/初始化时隐藏包含div的地图。理想情况下,我还希望这是一个限制事件,在给定的时间后调用处理函数。有关如何实施这一点的任何想法?提前谢谢。

更新

根据psousa的建议,我使用了 viewchangeend 事件。

这是我尝试实现的方法,试图检测地图是否已缩放或被拖动。我仍然将处理程序绑定到 viewchangeend 事件,但这次我检查地图的西北坐标或东南坐标是否已更改。

var map; // contains Microsoft.Maps.Map instance
var nw;  // contains the NW Microsoft.Maps.LocationRect instance
var se;  // contains the SE Microsoft.Maps.LocationRect instance 

// initialization code goes here some where

Microsoft.Maps.Events.addThrottledHandler(map, "viewchangeend", function(arg) {

    var curNW = map.getBounds().getNorthwest();
    var curSE = map.getBounds().getSoutheast();

    if (nw.latitude  != curNW.latitude ||
    nw.longitude != curNW.longitude ||
    se.latitude  != curSE.latitude ||
    se.longitude != curSE.longitude)
    {
        nw = curNW;
        se = curSE;

        // Execute actual handler code here
    }
}, 1000);

此代码无法正常工作。当我调试代码时,如果我去隐藏包含div的地图(使用jQuery),我注意到curNWcurSE的坐标与我存储的坐标不同。以前的电话。如果我从未拖动地图或放大或缩小,为什么会这样?我只是隐藏地图,为什么地图的坐标会改变?对我来说完全是无稽之谈。理想情况下,我希望Bing地图会为开发人员提供zoomenddragend事件,因此我可以说:

Microsoft.Maps.Map.addThrottledHandler(map, "zoomend", handler, 1000);
Microsoft.Maps.Map.addThrottledHandler(map, "dragend", handler, 1000);

谷歌地图我相信提供此功能。如果有人知道检查这些事件的更好方法,请告诉我。我不想在可能触发viewchangeend的页面元素中添加其他处理程序,因为在此页面中有很多内容可以实现。感谢帮助。

1 个答案:

答案 0 :(得分:0)

viewchangeendviewchange是最好的事件,因此没有很好的选择。

无论如何,您对节流事件有开箱即用的支持。所以,而不是:

Microsoft.Maps.Events.addHandler(map, 'viewchangeend', handler);

你可以使用(最后一个参数使用毫秒):

Microsoft.Maps.Events.addThrottledHandler(map, 'viewchangeend', handler, 500);

参考:http://msdn.microsoft.com/en-us/library/gg427623.aspx