bing 仅在调整 window 大小后加载地图
bing map loading only after resizing the window
我不太擅长 js 并尝试在我们的网站中使用 Bing 地图,但它显示了几次地图并且大部分时间不显示地图。下面是加载地图功能的代码片段,有人可以告诉我这个功能有什么问题吗,我正在从其他应用程序使用它:
function loadMap(storeData) {
var coordinates = {};
var map;
var stores = storeData.stores;
if( (typeof stores !== 'undefined') && (typeof stores[0].coordinates !== 'undefined') ) {
coordinates.lat = stores[0].coordinates.lat;
coordinates.lng = stores[0].coordinates.lng;
}else {
coordinates.lat = 33.74831008911133;
coordinates.lng = -84.39111328125;
}
map = new Microsoft.Maps.Map($('#bingMap')[0], {
credentials: 'mykey',
liteMode: true,
enableClickableLogo: false,
center: new Microsoft.Maps.Location(coordinates.lat, coordinates.lng)
});
self.center = new Microsoft.Maps.Location(coordinates.lat, coordinates.lng);
map.setView({zoom: 13});
return map;
}
我尝试了从其他 Whosebug 查询中获得的以下几个步骤,但它对我没有帮助:-(
setTimeout(this.loadMap(storeData), 2000); Microsoft.Maps.Events.addHandler(map,'resize')
问题出在您的 setTimeout
电话中:
你看,setTimeout
接收到2个参数:
- 要执行的函数
- 超时毫秒
在您的情况下,您使用了 setTimeout(this.loadMap(storeData), 2000);
,它不会将函数传递给 setTimeout,而是将执行结果传递给它。此外,这段代码也会立即执行 this.loadMap
而不是 2 秒后
要解决这个问题,您可以使用:
setTimeout(function() { this.loadMap(storeData)}, 2000);
或者:(@Sysix 的解决方案)
setTimeout(this.loadMap.bind(this), 2000, storeData);
我不太擅长 js 并尝试在我们的网站中使用 Bing 地图,但它显示了几次地图并且大部分时间不显示地图。下面是加载地图功能的代码片段,有人可以告诉我这个功能有什么问题吗,我正在从其他应用程序使用它:
function loadMap(storeData) {
var coordinates = {};
var map;
var stores = storeData.stores;
if( (typeof stores !== 'undefined') && (typeof stores[0].coordinates !== 'undefined') ) {
coordinates.lat = stores[0].coordinates.lat;
coordinates.lng = stores[0].coordinates.lng;
}else {
coordinates.lat = 33.74831008911133;
coordinates.lng = -84.39111328125;
}
map = new Microsoft.Maps.Map($('#bingMap')[0], {
credentials: 'mykey',
liteMode: true,
enableClickableLogo: false,
center: new Microsoft.Maps.Location(coordinates.lat, coordinates.lng)
});
self.center = new Microsoft.Maps.Location(coordinates.lat, coordinates.lng);
map.setView({zoom: 13});
return map;
}
我尝试了从其他 Whosebug 查询中获得的以下几个步骤,但它对我没有帮助:-(
setTimeout(this.loadMap(storeData), 2000); Microsoft.Maps.Events.addHandler(map,'resize')
问题出在您的 setTimeout
电话中:
你看,setTimeout
接收到2个参数:
- 要执行的函数
- 超时毫秒
在您的情况下,您使用了 setTimeout(this.loadMap(storeData), 2000);
,它不会将函数传递给 setTimeout,而是将执行结果传递给它。此外,这段代码也会立即执行 this.loadMap
而不是 2 秒后
要解决这个问题,您可以使用:
setTimeout(function() { this.loadMap(storeData)}, 2000);
或者:(@Sysix 的解决方案)
setTimeout(this.loadMap.bind(this), 2000, storeData);