如何检查谷歌地图是否已满载?

IT技术 javascript html google-maps
2021-01-18 18:20:52

我正在将 Google 地图嵌入到我的网站中。加载 Google 地图后,我需要启动一些 JavaScript 进程。

有没有办法自动检测 Google 地图何时完全加载,包括图块下载等?

一个tilesloaded()方法存在应该完成的正是这个任务,但它不工作

6个回答

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

我找到了一种方法来做到这一点:

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

当地图进入空闲状态时触发“空闲”事件 - 一切都已加载(或加载失败)。我发现它比 tileloaded/bounds_changed 更可靠,并且使用addListenerOnce方法在第一次触发“空闲”时执行闭包中的代码,然后分离事件。

另请参阅Google 地图参考中事件部分

它对我不起作用..在我的地图上出现任何东西之前触发
2021-03-24 18:20:52
-1:对于我在 chrome 和 firefox 中,它在脚本加载后但在任何图块显示之前始终触发。也许它在快速连接上并不明显,但我很幸运有一个非常慢的连接。'tilesloaded' 似乎工作虽然。
2021-03-24 18:20:52
当地图进入空闲状态时会触发它(不会加载更多内容)。有时可能会有一些瓦片因为连接不好而没有加载,所以即使有这样的丢失的碎片,它最终也会触发空闲事件。如果您需要确保地图完整,没有丢失瓷砖等,您应该寻找其他方式(例如“tilesloaded”事件)。
2021-03-25 18:20:52
感谢您的解决方案 - 我认为这正是我所需要的。我根本无法理解的是,为什么谷歌根本没有放入一个简单的准备好的钩子?:-O
2021-03-31 18:20:52
-1:在加载/显示图块之前触发。
2021-04-03 18:20:52

我正在创建 html5 移动应用程序,我注意到idle,bounds_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
    });
});
我得到Uncaught ReferenceError: map is not defined我试过延迟运行脚本,并在其他脚本结束时运行,但似乎没有任何效果。
2021-03-19 18:20:52
如果您在事件处理程序中定义事件处理程序,那您将度过一段糟糕的时光。我强烈建议你不要这样做,这里有一个稍微不那么hacky的替代方案,可以实现类似的目标:gist.github.com/cmawhorter/a1b0b6a6b73678b97920f748ebca244b
2021-03-20 18:20:52
@SamWillis 这很可能是因为你的map对象没有被实例化,我知道你说你在最后添加了它,但这就是错误的意思......它找不到你的地图对象
2021-03-23 18:20:52
第一个 tileloaded 函数对我来说效果很好,但第二个 tileloaded 函数从来没有为我运行过。
2021-04-04 18:20:52

2018年:

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

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

tilesloaded 是唯一正确等待 KML 图层全部呈现的解决方案
2021-03-20 18:20:52
这对我有用,但是每次我操作地图时它都会触发,最后我不得不使用它google.maps.event.addListenerOnce(map, 'tilesloaded', function(){}以便我只能触发一次。addListenerOnce似乎不支持map
2021-04-03 18:20:52

如果您使用的是 Maps API v3,这已经改变了。

在版本 3 中,您本质上希望为bounds_changed事件设置一个侦听器,它将在地图加载时触发。一旦触发,请删除侦听器,因为您不希望每次视口边界更改时都收到通知。

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

我发现这对我来说并不像寻找tilesloaded事件那样可靠
2021-04-06 18:20:52

如果您使用的是web components,那么他们以这个为例:

map.addEventListener('google-map-ready', function(e) {
   alert('Map loaded!');
});
因为它可能更好?
2021-03-16 18:20:52
你为什么说“糟糕的评论,在很多层面上都是错误的,我不知道从哪里开始”?
2021-03-20 18:20:52
可怕的评论,在很多层面上都是错误的,不知道从哪里开始。
2021-03-23 18:20:52
但是为什么要使用与谷歌地图不同的框架来提供解决方案呢?
2021-03-24 18:20:52
哈哈哈哈@晚安
2021-03-31 18:20:52