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

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

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


当前回答

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

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

其他回答

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

看到GMap2。加载tile供参考。

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

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

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

在我的情况下,瓷砖图像加载从远程url和tilesloaded事件在渲染图像之前被触发。

我用以下肮脏的方法解决了。

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
});

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

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

我需要它来计算地图边界,所以这对我来说已经足够了:

new ResizeObserver(()=> updateMapBounds()).observe(map.getDiv())
new IntersectionObserver(()=> updateMapBounds()).observe(map.getDiv())
updateMapBounds();