我把谷歌地图嵌入到我的网站。一旦谷歌地图被加载,我需要启动一些JavaScript进程。

有没有办法自动检测当谷歌地图已完全加载,包括瓷砖下载和所有?

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


当前回答

这让我在GMaps v3中困扰了一段时间。

我找到了一个这样做的方法:

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

当映射进入空闲状态时触发“idle”事件——所有内容都加载了(或加载失败)。我发现它比tilesloaded/bounds_changed和使用addListenerOnce方法更可靠,闭包中的代码在第一次“空闲”被触发时执行,然后事件被分离。

另请参阅谷歌地图参考中的事件部分。

其他回答

其中变量map是类型为GMap2的对象:

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

您可以每隔n毫秒检查GMap2.isLoaded()方法,以查看映射及其所有磁贴是否已加载(window.setTimeout()或window.setInterval()是您的朋友)。

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

如果你使用的是Maps API v3,这就改变了。

在版本3中,实际上需要为bounds_changed事件设置一个侦听器,该事件将在映射加载时触发。一旦触发,删除监听器,因为你不希望每次视口边界改变时都被通知。

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

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

看到GMap2。加载tile供参考。

2018年:

var map = new google.maps.Map(...)
map.addListener('tilesloaded', function () { ... })

https://developers.google.com/maps/documentation/javascript/events