Javascript 我们能知道谷歌地图是否已经初始化了吗?

Javascript 我们能知道谷歌地图是否已经初始化了吗?,javascript,google-maps,Javascript,Google Maps,假设我们用一些代码初始化了一个映射: function initialize() { var mapOptions = { center: new google.maps.LatLng(-34.397, 150.644), zoom: 8, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElement

假设我们用一些代码初始化了一个映射:

function initialize() {
    var mapOptions = {
        center: new google.maps.LatLng(-34.397, 150.644),
        zoom: 8,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map-canvas-0"),
        mapOptions);
}
是否有一种简单的方法来确定页面上的特定映射是否已初始化(在本例中,映射位于id=“map-canvas-0”)


我可以想出一些使用隐藏字段的方法,但我希望有一种更简单的方法。

创建一个全局布尔变量并将其设置为false。在映射初始化函数的末尾,将其值更改为true

检查map变量是否未定义


类型(地图)

我认为这里真正的问题是“在您的页面上,地图初始化与否意味着什么?”

在您的评论中提到,页面上可能有大约200张地图。您肯定不是说您为这200张地图中的每一张都调用了
新的google.maps.Map()
?这似乎会导致页面加载速度非常慢

实际上,您是否有200个容器
元素,其中一些元素可能已经使用
新的google.maps.map()
initialize()
函数中使用映射进行了初始化,而其中一些元素尚未使用该代码进行初始化,但在您执行该操作之前,它们只是空的
元素

你真正感兴趣的可能不是某个地图是否已经完全加载,而是你是否已经开始加载了

例如,您可以有一个页面,单击一个框,它开始加载地图。地图开始加载后,您不希望在第二次单击时重新加载它。在本例中,您感兴趣的不是地图是否已完全加载,而是它是否已开始加载

如果这就是您正在做的,那么测试它的一个简单方法是查看
元素是否有任何子元素:

function hasMap( id ) {
    return !! document.getElementById(id).firstChild;
}

if( hasMap("map-canvas-0") ) {
    // That map has loaded or at least has started loading
}
如果需要确定映射是否已完全加载,则可以使用
idle
事件。在这一点上,是否使用隐藏字段或JavaScript对象实际上是一个问题。JavaScript对象非常简单:

var mapsLoaded = {};

function loadMap( id, lat, lng, zoom ) {
    var options = {
        center: new google.maps.LatLng( lat, lng ),
        zoom: zoom,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var container = document.getElementById( id );
    var map = new google.maps.Map( container, options );
    google.maps.event.addListener( map, 'idle' function() {
        mapsLoaded[id] = true;
    });
}
现在,如果您想知道是否加载了特定ID的映射,只需使用:

mapsLoaded[id]
e、 g

将告诉您示例中的映射是否已完全加载

如果这个答案似乎有点离题,那就更全面地解释一下你在做什么好吗?什么时候创建容器元素?页面初始化时还是以后?何时以及如何创建地图?在用户点击或什么?如何生成容器ID?在什么情况下,您需要知道是否已创建地图?何时需要知道这一点?为什么


你越能清楚地说明这类问题,就越有可能有人能帮你给出一个具体的答案,你就越有可能有一个“啊哈”的时刻,并准确地知道该做什么。:-)

谢谢你的回复。我并不真正关心在地图加载后立即做什么,但假设用户在地图加载30秒后尝试做一些事情……我只想说,“嘿,地图加载了吗?”嗯,这看起来正是你可以用“空闲”来做的事件:保存一些表示地图已加载的布尔值。我已经考虑过了。例如,在id=“hidden-map-canvas-0”处创建一个隐藏字段,然后在正确加载时将该值设置为true。我只是想知道你是否是一个更简单的解决方案。为什么你需要一个隐藏的字段?只需使用一个JavaScript变量。谢谢你的建议,但是有人提出了类似的建议(无论是html隐藏字段还是js变量/数组),我觉得这更像是一种黑客行为。我想,如果这是唯一的方法,那么这是唯一的方法:)我不同意,我不认为这是一个黑客。对我来说,这是一个合乎逻辑的步骤。我不知道为什么您需要知道是否加载了映射,但您可以在代码中的任何其他点引用该变量,并获得真/假值。如果用户在映射加载30秒后尝试执行某项操作,您只需输入一条If语句来检查变量的值即可。答案很棒。不仅是针对我的特殊问题,而且我觉得这对许多遇到类似问题的人都有帮助。谢谢谢谢@Michael,这对我很有用。
mapsLoaded['map-canvas-0']