13

我正在开发的网站上使用 Google Maps API v3。我的地图下方有一个下拉框,允许用户在不同的标记集之间切换以显示在地图上。每个标记都使用 显示marker.setMap()

我的问题是地图有时需要很长时间才能显示新标记,尤其是在 IE 中。我想在地图切换标记时显示“加载”动画。但我不知道如何检测地图何时完成显示新数据(没有页面加载,因为这都是 AJAX)。是否有事件的回调或事件侦听器setMap(),所以我可以在最后一个标记完成加载时调用函数来停止“加载”动画?

4

2 回答 2

23

setMap() 似乎没有回调或事件侦听器,但我想出了一种方法来完成我想要的。我正在使用 jQuery 加载谷歌地图。这是我的代码。

初始化地图时,我为“空闲”事件设置了一个侦听器,它隐藏了“加载”动画。只要地图在滚动或缩放更改后完成重绘,就会触发“空闲”事件:

google.maps.event.addListener(this.map, 'idle', function() {
 $('#loading').hide();
});

在清除叠加层的函数中,我首先显示加载动画,然后使用 setMap(null) 清除每个标记。然后我通过将经度更改为 0.000000001 来稍微重新定位地图。这发生在所有 setMap() 调用之后,并触发隐藏加载动画的“空闲”事件。

// clear overlays from the map
function clearOverlays() {
 $('#loading').show();

 // clear the markers from the active data array
 if (activeData) {
  for (i in activeData) { activeData[i].setMap(null); }
 }
 activeData = '';

 // very slightly recenter the map to trigger the 'idle' event
 var centerlat = MYMAP.map.getCenter().lat();
 var centerlng = MYMAP.map.getCenter().lng() + .000000001;
 recenter = new google.maps.LatLng(centerlat, centerlng);
 MYMAP.map.setCenter(recenter);
}

这有点像黑客,但我希望其他人觉得这很有用。

于 2010-08-12T03:12:52.107 回答
0

也许这会有所帮助:http ://www.basicslabs.com/Projects/progressBar/#Examples

和例子:http ://www.basicslabs.com/Projects/progressBar/example/progressBar.html

于 2010-08-19T23:17:32.860 回答