当窗口调整大小时,保持谷歌地图居中

时间:2014-05-30 05:50:17

标签: javascript google-maps google-maps-api-3 maps

我正在尝试在调整窗口大小时将谷歌地图置于中心位置。我查看了stackoverflow上的许多示例,但这些似乎对我没什么影响。这是示例代码:

google.maps.event.addDomListener(window, 'resize', function() {
  //Window Resize and Position map to center
  center = map.getCenter();
  google.maps.event.trigger(map, 'resize');
  map.setCenter(center);
});

我在地图上也有标记,当地图位于中心时,它也应该相应地适合。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:-1)

当您调整窗口(和地图)的大小时,地图的中心也会发生变化(当您没有触发调整大小事件时也是如此)。

当您致电map.setCenter(center)时,center的值已经根据地图的新尺寸进行了更新。

每次更改地图时都必须存储地图的中心(地图调整大小时除外),并且在调整地图大小后还原存储的值。

可能的解决方案:

  google.maps.event.addListener(map, 'center_changed', function() {

    //a value to determine whether the map has been resized
    var size=[this.getDiv().offsetWidth,this.getDiv().offsetHeight].join('x');

    //when the center has changed, but not the size of the map
    if(!this.get('size') || size===this.get('size')){
       this.setValues({size:size,_center:this.getCenter()});         
    }
    //when the map has been resized
    else{
      google.maps.event.addListenerOnce(this,'idle',function(){
      this.setValues({size:size,center:this.get('_center')});});      
    }
  });
  //trigger the resize-event to initialize the size and _center-values
  google.maps.event.trigger(map,'center_changed',{});

演示:http://jsfiddle.net/doktormolle/Xce4w/