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

Javascript 如何检查Google地图是否已完全加载?,javascript,html,google-maps,Javascript,Html,Google Maps,我正在把谷歌地图嵌入我的网站。一旦GoogleMaps被加载,我需要启动一些JavaScript进程 是否有一种方法可以自动检测谷歌地图何时已完全加载,包括磁贴下载和所有内容? 存在一个tilesloadded()方法,该方法本应完全完成此任务,但是。GMap2::tilesloadded()将是您要查找的事件 有关参考信息,请参阅。如果您使用的是Maps API v3,则此选项已更改 在版本3中,您基本上希望为bounds\u changed事件设置一个侦听器,该事件将在映射加载时触发。一旦触

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

是否有一种方法可以自动检测谷歌地图何时已完全加载,包括磁贴下载和所有内容?

存在一个
tilesloadded()
方法,该方法本应完全完成此任务,但是。

GMap2::tilesloadded()
将是您要查找的事件


有关参考信息,请参阅。

如果您使用的是Maps API v3,则此选项已更改

在版本3中,您基本上希望为
bounds\u changed
事件设置一个侦听器,该事件将在映射加载时触发。一旦触发,请删除侦听器,因为您不希望每次视口边界更改时都收到通知


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

您可以每隔
n
毫秒检查
GMap2.isLoaded()
方法,查看是否加载了地图及其所有分幅(
window.setTimeout()
window.setInterval()
是您的朋友)


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

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

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

这让我有一段时间对GMAPSV3感到困扰

我找到了这样做的方法:

google.maps.event.addListenerOnce(map, 'idle', function(){
    // do something only the first time the map is loaded
});
“idle”事件在映射进入空闲状态时触发-所有内容都已加载(或加载失败)。我发现它比tilesloaded/bounds\u更可靠,使用
addListenerOnce
方法,在第一次触发“idle”时执行闭包中的代码,然后分离事件


另请参见谷歌地图参考中的。

我正在创建html5移动应用程序,我注意到当创建和渲染地图对象(即使它不可见)时,
空闲
边界发生变化
tilesloaded
事件会触发

要使地图在第一次显示时运行代码,请执行以下操作:

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
    });
});
如果您正在使用,则他们将此作为示例:

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

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

在我的例子中,从远程url加载的平铺图像和
平铺加载事件在渲染图像之前被触发

我用肮脏的方法解决了这个问题

var tileCount = 0;
var options = {
    getTileUrl: function(coord, zoom) {
        tileCount++;
        return "http://posnic.com/tiles/?param"+coord;
    },
    tileSize: new google.maps.Size(256, 256),
    opacity: 0.5,
    isPng: true
};
var MT = new google.maps.ImageMapType(options);
map.overlayMapTypes.setAt(0, MT);
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
    var checkExist = setInterval(function() {
        if ($('#map_canvas > div > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div > div').length === tileCount) {
            callyourmethod();
            clearInterval(checkExist);
        }
    }, 100); // check every 100ms
});

我已经读了很多关于tilesloadded()事件的文章,它在启动时似乎非常不一致。还有其他选择吗?tilesloaded事件似乎适合我。它在页面加载和我移动地图时触发。在您的地图上,它只是不一致,还是根本不起作用?不,只是不。它说的“tilesloaded”将在每次加载新的磁贴时触发,这意味着它不仅会在第一次加载时触发,而且每次您将地图拖到尚未加载磁贴的位置时也会触发。这取决于您使用的是addListener()还是addListenerOnce()。关于addListener(),您是对的-这就是为什么我使用
google.maps.event.addListenerOnce(映射'tilesloaded',函数(){
当映射进入空闲状态时会触发它(不会加载更多内容)。有时可能会有一些磁贴由于连接不良而未加载,因此即使存在此类缺失的磁贴,最终也会触发空闲事件。如果需要确保地图完整、无缺失磁贴等,则应寻求其他方式(例如“tilesloaded”事件)。这对我不起作用。。在任何东西出现在我的地图上之前触发-1:触发比加载/显示磁贴要快。-1:对于我来说,在chrome和firefox中,它总是在脚本加载后立即触发,但在任何磁贴显示之前。在快速连接上可能不明显,但我很幸运有一个非常慢的连接。“加载磁贴”似乎不起作用rk尽管如此。谢谢你的解决方案-我想这正是我所需要的。我简直无法理解的是,谷歌到底为什么没有安装一个简单的就绪挂钩?:-我发现这对我来说不如查找
tilesload
事件那么可靠。第一个tilesload函数对我来说很好,但第二个tiles函数对我来说很好加载的函数从未为我运行过。我得到了
未捕获引用错误:映射未定义
。我尝试过在其他脚本末尾延迟运行脚本,但似乎没有任何效果。如果您在事件处理程序中定义事件处理程序,您会遇到麻烦。我强烈建议您不要这样做,以下是一个稍微不那么骇人听闻的替代方案实现了类似的效果:糟糕的评论,它在很多层面上都是错误的,我不知道从哪里开始。你为什么说“糟糕的评论,它在很多层面上都是错误的,我不知道从哪里开始”?但是为什么要提供一个不同于谷歌地图的解决方案?因为它可能更好?哈哈哈@nightstilesloaded是唯一一个正确等待KML层全部渲染完成的解决方案