侦听器,用于加载与google.maps.event.addDomListener等效的Microsoft Bing Maps(窗口,“加载”,函数);

时间:2019-07-18 02:45:19

标签: javascript google-maps dom bing-maps dom-events

我通常会加载Google Maps,直到将完全用作地图画布的div加载完毕,否则它将无法正确充电。

我使用 google.maps.event.addDomListener(window,'load',function); ,其中function初始化Google地图和我需要的其他参数。在 DOM元素窗口完全加载之前,我将初始化地图,避免在仍然不存在的div中创建地图。

我的问题是哪些Microsoft Maps事件执行相同的操作。 Microsoft.Maps 使用 Microsoft.Maps.Events.addHandler 侦听事件,但是没有事件等待 DOM窗口加载(或者可能是有一个,我只是想念它)。如果没有,我如何实现这个目标?

2 个答案:

答案 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());
}