我发现其他 Stack Overflow 的问题建议使用 'idle' 事件来触发回调函数,当谷歌地图完全加载时。但在我的情况下,我想运行一些代码将文本注入地图 UI 元素。但是我发现'空闲'事件在这些元素创建之前被触发。
明确一点,我将一个初始化函数附加到窗口的加载方法上:
然而,emitText方法有一行代码尝试获取地图上的controlsDiv元素(id为“cd”),但我发现这个元素为空,因为emitText在controlsDiv实际完成加载之前就已经被触发了。
那么问题是如何检测地图的完全加载,包括任何UI元素。我的测试表明,“idle”事件在UI元素加载和DOM中可访问之前就已经被触发。提前感谢您的帮助!
明确一点,我将一个初始化函数附加到窗口的加载方法上:
google.maps.event.addDomListener(window, 'load', initialize);
在初始化函数中,我创建了一些UI元素并将它们附加到地图上:
function initialize() {
map = new google.maps.Map(document.getElementById("map-div"), mapOptions);
...
// set up the controls div
var controlsDiv = document.createElement('div');
controlsDiv.id="cd";
controlSetup(controlsDiv);
map.controls[google.maps.ControlPosition.RIGHT_TOP].push(controlsDiv);
}
好的,但接下来我想要做的是在一切准备就绪后运行一个函数。在我的情况下,我需要将进一步的文本插入到控件div中,因此我需要这些控件存在。
我已经尝试把这个作为initialize方法的最后一行:
google.maps.events.addListenerOnce(map,'idle',emitText);
然而,emitText方法有一行代码尝试获取地图上的controlsDiv元素(id为“cd”),但我发现这个元素为空,因为emitText在controlsDiv实际完成加载之前就已经被触发了。
那么问题是如何检测地图的完全加载,包括任何UI元素。我的测试表明,“idle”事件在UI元素加载和DOM中可访问之前就已经被触发。提前感谢您的帮助!