我有一个 'mapwrap' div 设置为 400px x 400px,里面我有一个 Google 'map' 设置为 100% x 100%。所以地图以 400 x 400px 加载,然后使用 JavaScript 我将“mapwrap”的大小调整为屏幕的 100% x 100% - 谷歌地图按照我的预期调整到整个屏幕,但瓷砖开始在右侧边缘之前消失页。
有没有我可以调用的简单函数来使 Google 地图重新调整为更大尺寸的“mapwrap”div?
我有一个 'mapwrap' div 设置为 400px x 400px,里面我有一个 Google 'map' 设置为 100% x 100%。所以地图以 400 x 400px 加载,然后使用 JavaScript 我将“mapwrap”的大小调整为屏幕的 100% x 100% - 谷歌地图按照我的预期调整到整个屏幕,但瓷砖开始在右侧边缘之前消失页。
有没有我可以调用的简单函数来使 Google 地图重新调整为更大尺寸的“mapwrap”div?
对于 Google Maps v3,您需要以不同的方式触发 resize 事件:
google.maps.event.trigger(map, "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
google.maps.event.trigger(map, "resize"); 从版本 3.32 开始没有任何影响
如果您使用的是 Google Maps v2,请checkResize()在调整容器大小后调用您的地图。 关联
更新
Google Maps JavaScript API v2 已于 2011 年弃用。它不再可用。
流行的答案google.maps.event.trigger(map, "resize");并不适合我一个人。
这是一个确保页面已加载并且地图也已加载的技巧。通过设置侦听器并侦听地图的空闲状态,您可以调用事件触发器来调整大小。
$(document).ready(function() {
google.maps.event.addListener(map, "idle", function(){
google.maps.event.trigger(map, 'resize');
});
});
这是我的答案,对我有用。
这是最好的,它可以完成工作。它将重新调整您的地图大小。不再需要检查元素来重新调整地图的大小。它所做的将自动触发 re-size 事件。
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 );
首先,感谢您指导我并关闭此问题。我从您的讨论中找到了解决此问题的方法。是的,让我们进入正题。问题是我在 CakePHP3 中使用 GoogleMapHelper v3 助手。当我尝试打开引导模式弹出窗口时,我对地图上的灰框问题感到震惊。延期了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}));
});