New*_*let 4 javascript openstreetmap leaflet
我在传单中有一张地图,使用以下代码,当页面加载时,该地图没有完全显示出来,我不知道为什么,如何解决?
var Mmap = L.map('Modalmap').setView([8.7144, 125.7481],8);
L.tileLayer( 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright"></a>',
subdomains: ['a','b','c']
}).addTo(Mmap);
L.control.scale({imperial:false}).addTo(Mmap);
var north = L.control({position: "topleft"});
north.onAdd = function(map) {
var div = L.DomUtil.create("div", "info_legend leaflet-bar");
div.innerHTML = '<img src="../lib/css/images/north-arrow-2.png" width="100%" height="100%">';
return div;
}
north.addTo(Mmap);
var geocoder = L.Control.geocoder({
defaultMarkGeocode: false
})
.on('markgeocode', function(e) {
var box = e.geocode.center;
document.getElementById("Latitude").value = box.lat;
document.getElementById("Longitude").value = box.lng;
var MarkLayer=L.marker([box.lat,box.lng]).addTo(Mmap);
var group = new L.featureGroup([MarkLayer]);
Mmap.fitBounds(group.getBounds());
}).addTo(Mmap);
Run Code Online (Sandbox Code Playgroud)
这张地图是模态的,我Modal-1从导航栏中叫它
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav" style="margin-top: -3px;">
<li class="dropdown"><a href="#" data-toggle="modal" data-target="#modal-1">New Customer</a></li>
<li class="dropdown"><a href="#" data-toggle="modal" data-target="#modal-2">New Category</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
这里有些猜测:我看到您的容器的名称是"Modalmap"。这使我认为您是在模式容器中显示地图。
我还猜测"Modalmap",当模态出现时,它的高度和宽度(这是传单的容器)是动态设置的。也许这给您的传单地图带来了一些问题,因为传单在初始化时会根据其父级宽度和高度来计算其宽度和高度。当模态不显示时,可能会发生这种情况,并且模态的宽度和高度可能较小,而这些较小的值最终就是传单的宽度和高度。
在显示模态并且模态具有正确的高度和宽度后,您可以尝试要求传单地图“刷新”其大小。
尝试此操作,在触发模态的那一行显示之后:
setTimeout(function(){ map.invalidateSize()}, 500);
Run Code Online (Sandbox Code Playgroud)
这将迫使传单在500毫秒后重新计算其大小。(我想500ms足以显示您的模态)。如果不起作用,请尝试更大的值。
更新:对于bootstrap 3,只需将其放在您的代码中
$('body').on('shown.bs.modal', function (e) {
setTimeout(function(){ map.invalidateSize()}, 500);
})
Run Code Online (Sandbox Code Playgroud)
提示:我建议您不要body用作jquery的选择器,因为这将触发所有模态的代码。使用标记中使用的更具体的选择器。更多信息,在引导模态打开时调用函数