一种选择是将初始地图大小设置为非常大的值,例如 1000 x 1000 像素或更大。这将强制 SVG 覆盖在可视区域内呈现(这似乎是 Firefox 的限制)。我意识到这可能会影响您网站的设计,因此您可能需要考虑用 div 包裹地图以隐藏溢出。
#map-wrap {
width: 500px;
height: 500px;
overflow: hidden;
}
#map {
width: 1000px; /* just big enough to show the whole thing at zoom #6 */
height: 1000px;
}
地图渲染后,您可以将地图重新调整为所需的 500 x 500 大小并重新居中地图。这可以在以下bounds_changed
事件中完成:
google.maps.event.addListener(map, 'bounds_changed', function() {
$map.css({ height: '500px', width: '500px' }); // back to desired dims
google.maps.event.trigger(map, 'resize'); // trigger a 'refresh'
map.setCenter(new google.maps.LatLng(-18.2, 35.1)); // re-center map
google.maps.event.clearListeners(map, 'bounds_changed'); // don't do this again
});
这是一个工作示例(在 Firefox 和 Chrome 中测试)。
一些警告:
- 您希望人们放大的越远,您需要渲染初始的“临时”地图就越大。例如,如果要允许缩放级别 7,则可能需要将初始地图设为 2000 x 2000 以进行补偿。显然,在渲染这么大的地图时存在性能问题。正如分散指出的那样,限制缩放级别可能是明智的。
- 由于最后一分钟重新调整大小,地图重新调整时会出现闪烁。您可能需要考虑使用 jQuery 隐藏/显示地图,或者可能在所有内容之上放置一个白色覆盖层,直到地图完成重新调整大小。