我正在使用Bing Maps版本8。 我试图找到,但无法理解地图满载时是否有事件。
我遇到的问题是我先创建一张地图:
var theMap = new MM.Map(document.getElementById('divMap'), ...
然后在我获取地图数据后的某个时刻,我打电话给
theMap.setView({
bounds: MM.LocationRect.fromLocations(locations)
});
问题是存在某种竞争条件,我注意到当地图没有完全加载时,这不能正常工作。当" divMap"还没有包含由bing贴图渲染的地图画布,那么地图的高度为0,setView函数设置了不正确的缩放。
然而,当地图完全加载后我在Chrome中通过控制台调用同一行时,它可以正常工作。
我想我应该在地图完全加载时调用setView,但我无法找到可用于此的事件。有什么想法吗?
编辑: 我认为问题在于DIV的高度。在您的示例中,DIV具有静态400px高度,而在我的情况下它是动态的,在加载地图并渲染画布之前,div高度为0px,导致setView无法正常工作。我试图在javascript中调试bing源文件并注意到它取决于高度,所以这就是问题所在。
画布准备好的事件会有助于这种情况。 现在我想添加一个setInterval来定期检查。
答案 0 :(得分:0)
没有地图加载事件。那就是说,我无法重现这一点。如果在创建地图后立即调用setView函数,那么它就可以正常工作,因此在加载一些数据后它肯定会起作用。以下示例显示了这一点:https://www.bing.com/api/maps/sdkrelease/mapcontrol/isdk#setMapViewOptions+JS
如果您正在创建/添加导致问题的数据,可能存在问题。如果这不能解决您的问题,请添加更多信息。
编辑:如果地图div最初没有高度,则计算中将出现错误。延迟加载地图,直到地图div有一个高度,你的问题应该解决。
答案 1 :(得分:0)
我在Bing Maps Version 8(V8)中遇到了类似的问题 并使用以下代码解决了该问题:
this.map.viewchangeend._handlers[0] = () => {
this.map._rootElement[0].childNodes[1].childNodes[1].style.display = "none";
}
上面的代码从地图中删除了div,其中包含有关当前位置的地址的信息。
稍后,我在Bing Maps文档中发现了解决此问题的正确方法 https://www.bing.com/api/maps/sdk/mapcontrol/isdk/addeventhandler#JS
答案 2 :(得分:0)
我不知道这个答案是否为时已晚,但是我迷上了这个问题,后来找到了解决方案。我注意到地图上有一个_mapHasLoaded字段,它是 undefined ,在准备好地图后会变成 True 。
一个解决方案可能是:
var interval = setInterval(() => {
if (this.map._mapHasLoaded === true){
// Do something...
clearInterval(interval);
}
}, 100);