2

我正在开发一个使用 Bing 地图 7.0 的 Web 应用程序。我想知道是否有一种方法可以将函数绑定到一个类事件,该事件在地图被拖动缩放Map时监听。从我在文档中看到的内容来看,Map 类的事件与我正在寻找的事件很接近,但是在我不想特别考虑的情况下调用此事件,例如,如果我使用隐藏地图的包含 div jQuery 或地图创建/初始化。理想情况下,我还希望这是一个节流事件,在给定时间后调用处理函数。关于如何实施的任何想法?viewchangeend

更新

正如 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),我会注意到,curNW并且与curSE我在上一次调用中存储的坐标不同。如果我从不拖动地图或放大或缩小地图,为什么会这样?我只是隐藏地图,为什么地图的坐标会改变?对我来说完全是无稽之谈。理想情况下,我希望 Bing 地图能够为开发人员提供一个zoomenddragend事件,所以我可以说:

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

我相信谷歌地图提供了这个功能。如果有人知道检查这些事件的更好方法,请告诉我。我不想向可能触发的页面元素添加额外的处理程序,viewchangeend因为在这个页面中发生了很多事情。感谢帮助。

4

1 回答 1

0

viewchangeend和是最好的viewchange事件,所以那里没有很好的选择。

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

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

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

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

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

于 2013-09-07T16:42:38.740 回答