我有一个'mapwrap'div设置为400px x 400px,在里面我有一个Google'地图'设置为100%x 100%。所以地图加载为400 x 400px,然后使用JavaScript我将'mapwrap'调整为屏幕的100%x 100% - 谷歌地图按照我的预期调整到整个屏幕,但是瓷砖开始在右边缘消失之前消失页。
是否有一个简单的功能我可以调用以使Google地图重新调整为更大尺寸的'mapwrap'div?
答案 0 :(得分:320)
对于Google Maps v3,您需要以不同方式触发调整大小事件:
google.maps.event.trigger(map, "resize");
请参阅resize事件的文档(您需要搜索“调整大小”一词):http://code.google.com/apis/maps/documentation/v3/reference.html#event
更新
这个答案已经存在很长时间了,所以一个小小的演示可能是值得的。虽然它使用jQuery,但没有必要这样做。
$(function() {
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397, 150.644)
};
var map = new google.maps.Map($("#map-canvas")[0], mapOptions);
// listen for the window resize event & trigger Google Maps to update too
$(window).resize(function() {
// (the 'map' here is the result of the created 'var map = ...' above)
google.maps.event.trigger(map, "resize");
});
});
html,
body {
height: 100%;
}
#map-canvas {
min-width: 200px;
width: 50%;
min-height: 200px;
height: 80%;
border: 1px solid blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&dummy=.js"></script>
Google Maps resize demo
<div id="map-canvas"></div>
更新2018-05-22
使用Maps JavaScript API版本3.32中的新渲染器版本,resize事件不再是Map
类的一部分。
文档说明
调整地图大小后,地图中心将固定
全屏控制现在保留了中心。
无需再手动触发调整大小事件。
来源:https://developers.google.com/maps/documentation/javascript/new-renderer
从版本3.32开始, google.maps.event.trigger(map, "resize");
没有任何影响
答案 1 :(得分:28)
如果您使用的是Google地图v2,请在调整容器大小后调用地图上的checkResize()
。 link
<强>更新强>
Google Maps JavaScript API v2在2011年已弃用。现已无法使用。
答案 2 :(得分:8)
流行的答案google.maps.event.trigger(map, "resize");
并不适用于我。
这是一个技巧,确保页面已加载,并且地图也已加载。通过设置侦听器并侦听地图的空闲状态,您可以调用事件触发器来调整大小。
$(document).ready(function() {
google.maps.event.addListener(map, "idle", function(){
google.maps.event.trigger(map, 'resize');
});
});
这是我的答案,对我有用。
答案 3 :(得分:2)
Wolfgang Pichler的map-in-a-box提供给
在可拖动且可调整大小的div元素中加载地图。
答案 4 :(得分:1)
这是最好的完成工作。 它会重新调整地图大小。 无需再检查元素以重新调整地图大小。 它的作用将自动触发重新调整大小事件。
google.maps.event.addListener(map, "idle", function()
{
google.maps.event.trigger(map, 'resize');
});
map_array[Next].setZoom( map.getZoom() - 1 );
map_array[Next].setZoom( map.getZoom() + 1 );
答案 5 :(得分:0)
首先,感谢指导我并解决这个问题。我找到了一种方法来解决您的讨论中的问题。是的,让我们来点。 问题是我在CakePHP3中使用GoogleMapHelper v3帮助器。当我试图打开bootstrap模式弹出窗口时,我对地图上的灰色框问题感到震惊。它已经延长了2天。最后我解决了这个问题。
我们需要更新GoogleMapHelper来解决问题
需要在setCenterMap函数中添加以下脚本
google.maps.event.trigger({$id}, \"resize\");
需要JavaScript中包含以下代码
google.maps.event.addListenerOnce({$id}, 'idle', function(){
setCenterMap(new google.maps.LatLng({$this->defaultLatitude},
{$this->defaultLongitude}));
});