我正在开发一个使用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),我注意到curNW
和curSE
的坐标与我存储的坐标不同。以前的电话。如果我从未拖动地图或放大或缩小,为什么会这样?我只是隐藏地图,为什么地图的坐标会改变?对我来说完全是无稽之谈。理想情况下,我希望Bing地图会为开发人员提供zoomend
或dragend
事件,因此我可以说:
Microsoft.Maps.Map.addThrottledHandler(map, "zoomend", handler, 1000);
Microsoft.Maps.Map.addThrottledHandler(map, "dragend", handler, 1000);
谷歌地图我相信提供此功能。如果有人知道检查这些事件的更好方法,请告诉我。我不想在可能触发viewchangeend
的页面元素中添加其他处理程序,因为在此页面中有很多内容可以实现。感谢帮助。
答案 0 :(得分:0)
viewchangeend
和viewchange
是最好的事件,因此没有很好的选择。
无论如何,您对节流事件有开箱即用的支持。所以,而不是:
Microsoft.Maps.Events.addHandler(map, 'viewchangeend', handler);
你可以使用(最后一个参数使用毫秒):
Microsoft.Maps.Events.addThrottledHandler(map, 'viewchangeend', handler, 500);