我正在开发一个使用 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 地图能够为开发人员提供一个zoomend
或dragend
事件,所以我可以说:
Microsoft.Maps.Map.addThrottledHandler(map, "zoomend", handler, 1000);
Microsoft.Maps.Map.addThrottledHandler(map, "dragend", handler, 1000);
我相信谷歌地图提供了这个功能。如果有人知道检查这些事件的更好方法,请告诉我。我不想向可能触发的页面元素添加额外的处理程序,viewchangeend
因为在这个页面中发生了很多事情。感谢帮助。