我有一个相当复杂的地图应用程序,可以处理多个自定义标记等。我有一个名为resizeWindow的函数,我在监听器中调用它,每当屏幕更改时,映射会通过计算新边界并强制调整大小来重绘自身。它看起来像这样:
window.onresize = function(event) { fitmap(); };
并且调整大小的函数是:
function fitmap(id) {
var coords = [];
var newlatlng = new google.maps.LatLng(projlat, projlng);
coords.push(newlatlng);
for (var i=0; i<markers[id].length; i++) {
newlatlng = new google.maps.LatLng(markers[id][i].latitude, markers[id][i].longitude);
coords.push(newlatlng);
}
}
var bounds = new google.maps.LatLngBounds ();
for (var i = 0, LtLgLen = coords.length; i < LtLgLen; i++) {
bounds.extend (coords[i]);
}
map.fitBounds(bounds);
当我实际调整窗口大小时,这很有用。但...
我在窗口右侧有一个菜单。我使用jquery.animate将该菜单移出屏幕。我将fitmap函数称为步骤过程(或仅在结束时一次),它不会重绘地图。
$('#rightSide').animate({ right:"-240px" }, {
duration:1000,
step: function(now,fx) {
fitmap();
}
});
我已阅读并阅读此内容,似乎Google Maps API v3.0存在一个奇怪之处,即如果没有任何实际更改,重绘不会发生。在这种情况下,我的可用窗口确实从屏幕宽度 - 菜单更改为实际全屏。但是没有重绘。
我试过google.maps.event.trigger(map,'resize');这也不起作用。
有没有办法绝对强制谷歌地图重绘?
答案 0 :(得分:59)
google.maps.event.trigger(MapInstance,'resize')
对我来说很好,把它放在函数fitMap
的开头。
你缺少什么:
目前(不在上面发布的代码中,在您的实时代码中),您在每个resizeWindow
上致电step
。
当您在step
上调用此功能时,该功能将在之前调用当前步骤的动画完成。结果是,当完成完整动画时,将不会调用resizeWindow
,例如,地图右侧的边距。
解决方案:也可以resizeWindow
调用complete
- animation
的回调。