Google 地图在隐藏 div 内时不显示
Google map not showing when inside a hidden div
我看到很多人在显示隐藏的 div 时遇到调整大小的问题,但我遇到的问题略有不同,需要不同的解决方案。我的 google 地图正常工作,但我现在正在构建一个向导,一次只显示我页面的步骤。当我启用隐藏 div 时,地图在显示之前会保持一段时间的白色,有时根本不会加载,但随后我将其移出隐藏 div 到主体部分并立即加载。我不明白,它没有显示任何错误。请帮忙。刷新地图通常可以解决问题,但是
<div id="step-3" onshow="setTimeout(google.maps.event.trigger(map, 'resize'), 3000)">
<h2 class="StepTitle">Step 3 Content</h2>
<label>Select Job Locations: </label>
<div id="map-canvas" style="width:100%; height:400px;"></div>
<br>
<label>Zip codes in region:</label><small> (manually add zipcodes seperated in comma space form)</small>
<br>
<textarea id="zipcodes"style="width:100%;"></textarea><br>
</div>
没有像我想象的那样修复它。
我不知道它是否适合您的解决方案,但解决方法是将您的地图元素附加到 div 和 jQuery,当它显示时,并在隐藏时删除。不理想,但它可能是一个快速修复。
当地图的 div
、父级或父级父级(任何前身)具有 display:none
样式且您创建地图时,地图视图将无法正确初始化。您必须在地图上触发调整大小事件才能重新初始化地图视图。试试打电话:
google.maps.event.trigger(map, "resize");
就在 div 变得可见之后。可以肯定的是你可以把resize trigger 改成一个小的timeout,当他们点击div 来显示。
我今天遇到了同样的问题,花了几个小时试图解决它。我遇到了 2 个问题:
- 我没有地图对象,因为它是由图书馆创建的。
- 地图不在
<iframe>
中,所以我无法在显示我的 <div>
后简单地重新加载它。
但我发现每次 window 调整大小时都会显示地图,因为地图上的调整大小事件会自动触发,所以实际上您所要做的就是触发 window 调整大小事件和一切都会像魔术一样工作。
在使用 javascript 显示隐藏的 <div>
后试试这个:
window.dispatchEvent(new Event('resize'));
已在 Chrome 和 Firefox 上测试。使用 fancybox2 库进行测试。
希望这可以帮助像我这样不喜欢深入研究任何 API 来解决简单问题的人。
不幸的是,调整大小并不总是有效。我使用的技术是在 div 屏幕外渲染地图,然后在我想显示它时将其移入。
<div id="offscreenMaps" style="position:absolute;top:-3000px">
<div id="gMap"></div>
</div>
正常渲染地图;请注意,地图如果可见,但在屏幕外。然后显示它。
$('#gMap').appendTo('#visibleDiv');
您还避免了重新渲染地图的笨拙,因为地图已经渲染过了。干净利落。
我看到很多人在显示隐藏的 div 时遇到调整大小的问题,但我遇到的问题略有不同,需要不同的解决方案。我的 google 地图正常工作,但我现在正在构建一个向导,一次只显示我页面的步骤。当我启用隐藏 div 时,地图在显示之前会保持一段时间的白色,有时根本不会加载,但随后我将其移出隐藏 div 到主体部分并立即加载。我不明白,它没有显示任何错误。请帮忙。刷新地图通常可以解决问题,但是
<div id="step-3" onshow="setTimeout(google.maps.event.trigger(map, 'resize'), 3000)">
<h2 class="StepTitle">Step 3 Content</h2>
<label>Select Job Locations: </label>
<div id="map-canvas" style="width:100%; height:400px;"></div>
<br>
<label>Zip codes in region:</label><small> (manually add zipcodes seperated in comma space form)</small>
<br>
<textarea id="zipcodes"style="width:100%;"></textarea><br>
</div>
没有像我想象的那样修复它。
我不知道它是否适合您的解决方案,但解决方法是将您的地图元素附加到 div 和 jQuery,当它显示时,并在隐藏时删除。不理想,但它可能是一个快速修复。
当地图的 div
、父级或父级父级(任何前身)具有 display:none
样式且您创建地图时,地图视图将无法正确初始化。您必须在地图上触发调整大小事件才能重新初始化地图视图。试试打电话:
google.maps.event.trigger(map, "resize");
就在 div 变得可见之后。可以肯定的是你可以把resize trigger 改成一个小的timeout,当他们点击div 来显示。
我今天遇到了同样的问题,花了几个小时试图解决它。我遇到了 2 个问题:
- 我没有地图对象,因为它是由图书馆创建的。
- 地图不在
<iframe>
中,所以我无法在显示我的<div>
后简单地重新加载它。
但我发现每次 window 调整大小时都会显示地图,因为地图上的调整大小事件会自动触发,所以实际上您所要做的就是触发 window 调整大小事件和一切都会像魔术一样工作。
在使用 javascript 显示隐藏的 <div>
后试试这个:
window.dispatchEvent(new Event('resize'));
已在 Chrome 和 Firefox 上测试。使用 fancybox2 库进行测试。
希望这可以帮助像我这样不喜欢深入研究任何 API 来解决简单问题的人。
不幸的是,调整大小并不总是有效。我使用的技术是在 div 屏幕外渲染地图,然后在我想显示它时将其移入。
<div id="offscreenMaps" style="position:absolute;top:-3000px">
<div id="gMap"></div>
</div>
正常渲染地图;请注意,地图如果可见,但在屏幕外。然后显示它。
$('#gMap').appendTo('#visibleDiv');
您还避免了重新渲染地图的笨拙,因为地图已经渲染过了。干净利落。