如何检查Google地图是否已完全加载?

我将Google地图embedded我的网站。 一旦谷歌地图加载,我需要启动一些JavaScript的过程。

有什么方法可以在Google地图完全加载时进行自动检测,包括磁贴下载等等?

tilesloaded()方法存在,应该完成这个任务,但它不起作用 。

GMaps v3有一阵子让我困扰了一会儿。

我find了一个这样做的方法:

 google.maps.event.addListenerOnce(map, 'idle', function(){ // do something only the first time the map is loaded }); 

当地图进入空闲状态时,会触发“空闲”事件 – 加载的所有内容(或加载失败)。 我发现它更可靠,然后tilesloaded / bounds_changed和使用addListenerOnce方法封闭的代码被执行第一次“空闲”被激发,然后事件分离。

另请参阅Google地图参考中的活动部分 。

我正在创buildhtml5移动应用程序,并且我注意到,当地图对象被创build和渲染时(即使它不可见), idlebounds_changedtilesloaded事件触发。

为了让我的地图在第一次显示时运行代码,我做了以下操作:

 google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ //this part runs when the mapobject is created and rendered google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ //this part runs when the mapobject shown for the first time }); }); 

如果您使用的是Maps API v3,则已更改。

在版本3中,您基本上想要为bounds_changed事件设置一个侦听器,这会在地图加载时触发。 一旦触发,就可以移除侦听器,因为每当视口范围发生变化时都不需要通知侦听器。

随着V3 API的发展,这可能会在未来发生变化:-)

如果您使用的是Web组件 ,那么他们就有一个例子:

 map.addEventListener('google-map-ready', function(e) { alert('Map loaded!'); }); 

GMap2::tilesloaded()将是你正在寻找的事件。

请参阅GMap2.tilesloaded以供参考。

variablesmap是GMap2types的对象的地方:

  GEvent.addListener(map, "tilesloaded", function() { console.log("Map is fully loaded"); }); 

如果地图没有合适的高度和宽度,则只会加载一个图块,地图将显示为灰色并断开。

因为它确实加载了一个tile,所以tilesloaded事件将会处理,而且是无用的。

但是,您可以检查是否加载了多个图块。 如果你熟悉jQuery,那么这个查询会得到你在google maps api v3中的子节点数:

var mapChunks = $(“。gm-style> div:first-child> div:first-child> div:first-child> div:first-child> div:first-child”)[0] .childNodes.length;

这显然不是预期的devise模式,然而,对于> 1的简单检查告诉我是否需要重新初始化地图,然后再着重于标记。

一个缺点是animation像DROP标记可能仍然是animation从以前的尝试加载地图。 这个API不够聪明,要等到它有足够大的可视区域,或者只是简单地提出一个错误事件,而不是基本上完成其处理过程。

这个答案应该被视为更多的“为什么它是坏的”,而不是一个修复,但如果你想在你的代码中使用我的Kludge,请谨慎行事。 我可能记得回来更新这个更优雅的解决scheme后:)

您可以每n毫秒检查一下GMap2.isLoaded()方法,以查看地图及其所有图块是否已加载( window.setTimeout()window.setInterval()是您的朋友)。

虽然这不会给你加载完成的确切事件,但它应该足以触发你的Javascript。