mapContainer
如评论之一所述,如果divdisplay: none
在页面加载期间隐藏(),则不会初始化谷歌地图对象......
因此,在使div 可见后,您将需要“手动”初始化谷歌地图对象。mapContainer
这是完全工作的代码(基于您发布的代码),可以满足您的需求:
将此 JavaScript 添加到您的页面
<script>
function resizeElement(elementId,width,height){
console.log("Resizing element " + elementId + " W/H="+ width + "/" + height);
var element = document.getElementById(elementId);
element.style.width=width+"px";
element.style.height=height+"px"
}
function resizePfGmapInsideWrapperElement(wrapperElementId){
var wrapperElement=document.getElementById(wrapperElementId);
var width=wrapperElement.clientWidth-40;
var height=wrapperElement.clientHeight-60;
resizeElement("gmap",width,height);
}
function resizePfGmapInsideDiv(){
var gmap = PF('gmap').getMap();
console.log(gmap);
resizePfGmapInsideWrapperElement("mapContainer");
}
function toggleDivVisibility() {
var div = document.getElementById("mapContainer");
if(div.style.display === "block"){
div.style.display = "none";
}else{
div.style.display = "block";
div.style.width="600px";
div.style.height="400px";
initializeGmap();
resizePfGmapInsideDiv();
}
}
function initializeGmap() {
var myOptions = {
zoom: 15,
center: new google.maps.LatLng(51.30993291552862, 9.448113441467285),
mapTypeId: google.maps.MapTypeId.TERRAIN
}
new google.maps.Map(document.getElementById("gmap"),myOptions);
}
</script>
并且,仅出于测试目的,添加一个按钮来切换mapContainer
div 可见性
<p:commandButton value="Show/hide map" onclick="toggleDivVisibility();"/>
关键的 JS 方法在您使 div 可见的那一刻执行是不言自明initializeGmap()
的:它将“在给定的 HTML 容器内创建一个新地图,该容器通常是一个 DIV 元素”。如上面引用的文档中所述。