我通常会加载Google Maps,直到将完全用作地图画布的div加载完毕,否则它将无法正确充电。
我使用 google.maps.event.addDomListener(window,'load',function); ,其中function初始化Google地图和我需要的其他参数。在 DOM元素窗口完全加载之前,我将初始化地图,避免在仍然不存在的div中创建地图。
我的问题是哪些Microsoft Maps事件执行相同的操作。 Microsoft.Maps 使用 Microsoft.Maps.Events.addHandler 侦听事件,但是没有事件等待 DOM窗口加载(或者可能是有一个,我只是想念它)。如果没有,我如何实现这个目标?
答案 0 :(得分:0)
如果您只是在等待window
加载,为什么不使用原生window.onload
?
function load() {
var script = document.createElement("script");
script.type = "application/javascript";
// GetMap function will be called when Bing Maps script is downloaded, so inside there initialize your map and other params
script.src = "http://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[YOUR_BING_MAPS_KEY]";
document.body.appendChild(script);
}
window.onload = load;
答案 1 :(得分:0)
较旧版本的Bing地图(v6.3或v7)支持地图检测。但是Bing Map v8控件没有加载方法。
但是,还有另一种方法可以通过使用“自定义叠加层”来检测是否加载了Bing地图。
自定义叠加层是地图控件的子级,因此无法加载 直到地图DOM自身加载。
这是一个示例代码,它将检测bing映射负载。请检查此link了解更多详情。
<div id="myMap" style="position:relative;width:800px;height:600px;"></div>
<script type='text/javascript' src='https://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[Bing Map Key]' async defer></script>
function GetMap()
{
var map = new Microsoft.Maps.Map('#myMap', {});
var pushpin = new Microsoft.Maps.Pushpin(map.getCenter(), null);
map.entities.push(pushpin);
//Create a temporary custom overlay.
var SplashScreenOverlay = function () {
}
//Set prototype to sub-class CustomOverlay
SplashScreenOverlay.prototype = new Microsoft.Maps.CustomOverlay();
SplashScreenOverlay.prototype.onAdd = function () {
//Need to add something to the DOM so we can track when it gets added to the map.
this.setHtmlElement(document.createElement('div'));
};
//Implement the onLoad method to perform custom operations of rendering the DOM element
SplashScreenOverlay.prototype.onLoad = function () {
//Map should be fully loaded at this point, remove spalsh screen.
alert('map loaded')
if(self.onLoad){
self.onLoad(map);
}
map.layers.remove(this);
};
map.layers.insert(new SplashScreenOverlay());
}