我已经在我的应用程序中实现了Google地图(在模式中),但是正如您在下面的图片中看到的那样,有一个灰色区域我当然想要摆脱它。可以移动地图以使灰色区域消失,但不应该这样做。
事情就是地图显示在一个模态框内,其中包含了点击显示模态按钮时动态创建的大量内容。似乎问题可能是在加载模态之前地图内容没有完全加载,但我不确定......
HTML:
...
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Test</h3>
</div>
<div id="modal-left" class="modal-body left"></div>
<div class="modal-body right">
<div id="map"></div>
</div>
</div>
...
JS:
function initializeMap(latitude, longitude) {
var place = new google.maps.LatLng (latitude, longitude);
var myOptions = {
zoom: 10,
center: place,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map"), myOptions);
var marker = new google.maps.Marker({
position: place,
map: map,
title: ""
});
};
$('.modal-btn').click(function(){
var producerId = $(this).attr('id');
GetProducer(producerId, function(data) { // <--- data retrieved through ajax
initializeMap(data.latitude, data.longitude);
var titel = data.name;
var content = "<p><img class='modal-img' src='" + data.imgurl + "' /></p>" +
"<p>" + data.name + ", " + data.address + "<br/>" +
data.zipcode + " " + data.town + "</p>" +
"<p><a href='" + data.url + "' >" + data.url + "</a></p>";
$('#myModalLabel').html(titel);
$('#modal-left').html(content);
});
});
图片1:
图片2:
答案 0 :(得分:7)
发生这种情况的常见原因是地图的大小在地图初始化后会发生变化。如果由于某种原因改变了id =“map”的div的大小,则需要触发“调整大小”事件
google.maps.event.trigger(map, 'resize');
您可以尝试在javascript控制台中触发事件并查看它是否有帮助。
请注意,这个答案是猜测,因为问题中没有任何内容可以使用,所以如果它没有用,请告诉我。
答案 1 :(得分:3)
go google.maps.event.trigger(map,&#34; resize&#34;);在setTimeout函数中,以便在触发事件后触发它。
答案 2 :(得分:2)
我一直在寻找解决方案。我有完全相同的问题,我不是唯一的问题。 上面的代码行还不够,但我注意到手动调整浏览器的大小就是修复问题。如果它也解决了你的问题,那么这就是我解决问题的方法:
1)在初始化地图的函数末尾添加它。它将添加一个监听器并在加载映射时调用该函数。它基本上会模拟调整大小。
google.maps.event.addListenerOnce(map, 'idle', function(){
$(window).resize();
map.setCenter(yourCoordinates);
});
我必须在调整大小后重新定位地图
2)创建一个调整大小的侦听器,调用google map resize事件,如下所示:
$(window).resize(function() {
if ($("#map_canvas").children().length > 0){
if (map)
google.maps.event.trigger(map, 'resize');
}});
我还必须把地图放在我的初始化函数之外...... 我知道这不是最好的解决方案,但它现在有效。不要担心resize()调用。
好像它与包含谷歌地图的隐藏div有关。我还在this website jfyi找到了类似的解决方案。 祝你好运!
答案 3 :(得分:0)
这对我有用:
var center = map.getCenter();
// . . . your code for changing the size of the map
google.maps.event.trigger(map, "resize");
map.setCenter(center);
取自链接,@ Bruno提到