在调整浏览器大小时将Google Maps(V3)居中(响应式)


124

我的页面上有一个Google Maps(V3),页面宽度为100%,中间有一个标记。调整浏览器窗口的宽度大小时,我希望地图保持居中(响应)。现在,地图仅停留在页面的左侧,并且变得更小。

更新感谢邓肯(Duncan)的帮助,它完全按照描述的方式工作。这是最终代码:

var center;
function calculateCenter() {
  center = map.getCenter();
}
google.maps.event.addDomListener(map, 'idle', function() {
  calculateCenter();
});
google.maps.event.addDomListener(window, 'resize', function() {
  map.setCenter(center);
});

1
做得好!是的,您必须不断将当前中心值输出到全局范围,以便dom侦听器可以获取它
efwjames 2013年

如果您要以这种方式达到顶峰,则center不必是全局的。提供center(和calculateCenter)与处于同一范围内map,那么一切都应该正常工作。当然,如果map是全局的,那么您也需要修复它:)
Roamer-1888

也许对大多数人来说是显而易见的,但是此代码是在地图加载后出现的,因此它至少应在windows.onload上
Victoria Ruiz

感谢,这应该是默认的谷歌地图beaviours
Yukulélé

Answers:


143

您需要在窗口调整大小时有一个事件侦听器。这对我有用(将其放入您的initialize函数中):

google.maps.event.addDomListener(window, 'resize', function() {
    map.setCenter(center);
});

这很完美,谢谢!但是,如果有人移动了地图,我如何获得地图的新中心?我找到了getCenter()函数,但无法使其正常工作。map.setCenter(map.getCenter()); 不起作用。
Gregory Bolkenstijn 2012年

您需要另一个事件侦听器,我认为是地图对象上的“ center_changed”,它使用新坐标更新了全局变量,然后可以在setCenter中使用它。
duncan 2012年

1
我也尝试过: var center; google.maps.event.addListener(map, 'center_changed', function() { center = map.getCenter(); }); google.maps.event.addDomListener(window, 'resize', function() { map.setCenter(center); }); 不起作用。任何帮助,将不胜感激。
Gregory Bolkenstijn 2012年

取而代之的是“ bounds_changed”如何?
duncan 2012年

49
这是最简单的方法:hsmoore.com/blog/...
AO_

83

检测浏览器调整大小事件,在保留中心点的同时调整Google Map的大小:

var map = ...; // your map initialisation code

google.maps.event.addDomListener(window, "resize", function() {
    var center = map.getCenter();
    google.maps.event.trigger(map, "resize");
    map.setCenter(center); 
});

通过其他方式(例如,使用jQuery-UI“可调整大小”控件)调整Google地图大小时,可以在其他事件处理程序中使用相同的代码。

来源:http : //hsmoore.com/blog/keep-google-map-v3-centered-when-browser-is-resized/将链接记入@smftre

注意:此代码已链接到@smftre对已接受答案的注释中。我认为值得将其添加为自己的答案,因为它确实优于公认的答案。它不需要全局变量来跟踪中心点,也不需要事件处理程序来更新该变量。


同意@William,此方法可在调整地图大小时产生更准确的中心位置。
tenthfloor

接受的答案无法正常工作,这可以解决问题
Tom

这是最佳且可行的解决方案。适用于每个调整大小的Windows事件。其他解决方案无法正常工作。
zdarsky.peter 2014年

1
这确实应该发布为社区Wiki。
gustavohenke,2015年

它可以工作,但是我想了解更多。究竟是什么google.maps.event.trigger(map, "resize");
meduz'15


0

html:使用您选择的ID创建div

<div id="map"></div>

js:创建地图并将其附加到刚创建的div

var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 16,
    center: new google.maps.LatLng(-33.890542, 151.274856)
});

窗口调整大小时居中

var center = map.getCenter();

google.maps.event.addDomListener(window, 'resize', function() {
    map.setCenter(center);
});

0

将上述解决方案更新为es6。

let center;
const addMapListener = google.maps.event.addDomListener;

addMapListener(map, 'idle', () => center = map.getCenter());
addMapListener(window, 'resize', () => map.setCenter(center));

addDomListener同时将window用作DOM元素和,将都用作DOM元素map。地图对象应使用google.maps.event.addListener或其自己的map.addListener事件处理程序。
邓肯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.