我正在尝试使用Twitter Bootstrap将Google Map 插入模式 . 模态显示当前 Map 的形状,但仅显示 Map 的一部分,其余为灰色 . 调整屏幕大小后, Map 始终显示正确,但位于错误的位置 .
我搜索并找到了一些建议,例如调用 Map 的resize事件,或者将 Map 图像的max-width设置为none,但这些建议都没有帮助到目前为止 . 似乎 Map 无法确定它的正确大小,只要它隐藏在一个元素中即可 .
JS
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(51.219987, 4.396237),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("mapCanvas"),
mapOptions);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(51.219987, 4.396237)
});
marker.setMap(map);
}
HTML
<div class="modal hide fade" id="myModal">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3></h3>
</div>
<div class="modal-body">
<div id="mapCanvas" style="width: 500px; height: 400px"></div>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
</div>
</div>
我正在使用Twitter Bootstrap v2.0.4 . 我需要一些帮助,因为我没有正确触发调整大小事件或编辑css,因此谷歌 Map 是独立的 .
11 回答
接受的答案摆脱了灰色方框,但并没有将 Map 置于正确的坐标中心 . 我的解决方案是等待渲染 Map ,直到模态完成显示 .
以下代码适用于bootstrap 3
希望这会有所帮助
我已修复解决方案:
//事件 shown.bs.modal on modal bootstrap将在模态显示后显示,而不是使用 show.bs.modal 因为它将在模态显示之前调用 .
谷歌 Map 确实显示放置在动态元素内的"Grey"区域's when it'(例如:一个调整大小,淡化等) . 你是否正确触发"resize"函数,该函数应在动画完成后调用(Bootstrap 3中的
shown.bs.modal
事件或Bootstrap 2中的shown
event):在Bootstrap 2中,您将执行以下操作:
(其中
map
是 Map 的变量名称(有关详细信息,请参阅Google Maps documentation),#myModal
是元素中的ID) .UPDATE 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开始没有任何影响对我来说,它就像这样(Boostrap 3):
正确显示 Map 并居中
我想根据原始答案指出我做的一些修改,使其与Bootstrap 3一起使用(检查modals usage) .
在这种情况下,我还会根据Jan-Henk对第一个答案的评论中提出的this question来重新定位 Map .
使用Bootstrap 3时,您需要使用其文档中提供的内容,即代替“显示”使用'shown.bs.modal'
例:
事实上,接受的答案确实适用于div的内容是本地的情况 . 不幸的是,我遇到了同样的问题,显示了一个包含在远程数据中的 Map . 获取 Map 的句柄并调用resize并没有正确地将我的 Map 居中 . 以下是我在远程数据情况下修复问题的方法 .
包含脚本标记作为远程数据的一部分,其中包含初始化 Map 的功能
在主页面上显示的对话框中调用该功能
这样,在初始化之前, Map 已在对话框中调整大小 . 希望这可以帮助其他类似情况的人 .
试试这个 !
我也面临同样的问题,但我通过等待 Map 的“空闲”状态(即它完成时)然后调用resize来解决它:
后