我有一个很大的问题。我想打开一个传单Map在模态。但Map显示不正常。瓷砖没有加载。
脚本如下:
http://bootply.com/98730
<a href="#myModal" role="button" class="btn btn-primary" data-toggle="modal">Open Map</a>
<div id="myModal" class="modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Map</h4>
</div>
<div class="modal-body">
<div class="modal-body" id="map-canvas"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn" data-dismiss="modal" aria-hidden="true">OK</button>
</div>
</div>
</div>
$.getScript('http://cdn.leafletjs.com/leaflet-0.7/leaflet.js',function(){
/* map settings */
var map = new L.Map('map-canvas');
var cloudmade = new L.TileLayer('http://{s}.tile.cloudmade.com/f1376bb0c116495e8cb9121360802fb0/997/256/{z}/{x} /{y}.png', {
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, Imagery © <a href="http://cloudmade.com">CloudMade</a>',
maxZoom: 18
});
map.addLayer(cloudmade).setView(new L.LatLng(41.52, -71.09), 13);
});
非常感激的帮助
9条答案
按热度按时间8i9zcol21#
我认为是这样的,当创建Map时,您的'map-canvas'元素的容器宽度/高度还没有调整到模式对话框的宽度/高度。这导致Map的大小不正确(小于)。
你可以通过调用
map.invalidateSize()
来修复这个问题。这将重新调整L.Map容器的宽度/高度边界。您可以通过挂接到显示Bootstrap模态的事件来自动调用它。
将此代码插入JavaScript。当显示模态时,Map将使其大小无效。超时是因为模态显示和添加到DOM可能需要一些动画/过渡时间。
a0x5cqrl2#
您可能应该避免将setTimeout与随机选择的延迟一起使用。使用'showed.bs.modal'事件而不是'show.bs. modal'的更好方法是:
或者使用下划线的defer:
rqcrx0a63#
我使用以下解决方法:
p5cysglq4#
我尝试了map.invalidateSize(),但没有修复。
最后它被这样修正:
$('#map-modal').on('显示.bs.模态',函数(事件){});
在函数中,放置与加载Map相关的代码。
nwlqm0z15#
这对我很有效-
bfhwhh0e6#
这对我很有效,你可以在这里阅读
2w2cym1i7#
在加载时传单Map不正确显示可以通过以下方式解决:
aiazj4mn8#
我如何解决此问题:在主窗口中初始化Map。然后将Map移动到打开的模式。
xv8emn3q9#
对于vue.js和nuxt.js开发人员,可能是因为使用了v-show或v-if,但不必担心,您唯一要做的就是使用如下的客户端专用标记: