2

我看到很多人在显示隐藏的 div 时遇到调整大小的问题,但我遇到了一个稍微不同的问题,需要不同的解决方案。我的谷歌地图工作正常,但我现在正在构建一个向导,一次只显示我页面的步骤。当我启用隐藏的 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>

没有像我想象的那样修复它。

4

4 回答 4

5

当地图的div,或者它的父级,或者它的父级父级(任何前任)具有display:none样式时,并且您创建了地图,地图视图将无法正确初始化。您必须在地图上触发调整大小事件才能重新初始化地图视图。试着打电话:

google.maps.event.trigger(map, "resize");

就在 div 变得可见之后。为了确保您可以将调整大小触发器设置为一个小的超时,当他们单击要显示的 div 时。

于 2016-06-02T15:41:40.623 回答
4

我今天遇到了同样的问题,花了几个小时试图解决它。我有两个问题:

  1. 我没有地图对象,因为它是由库创建的。
  2. 地图不在里面,<iframe>所以我不能在显示我的之后简单地重新加载它<div>

但我发现每次调整窗口大小时都会显示地图,因为地图上的调整大小事件是自动触发的,所以实际上你所要做的就是触发窗口调整大小事件,一切都会像魔术一样工作。

<div>使用 javascript显示隐藏后尝试此操作:

window.dispatchEvent(new Event('resize'));

在 Chrome 和 Firefox 上测试。用 fancybox2 库测试。

希望这可以帮助像我这样不喜欢深入任何 API 来解决简单问题的人。

于 2016-07-23T18:57:26.033 回答
0

不幸的是,调整大小并不总是有效。我使用的技术是在屏幕外的 div 中渲染地图,然后在我想显示时将其移入。

<div id="offscreenMaps" style="position:absolute;top:-3000px">
   <div id="gMap"></div>
</div>

正常渲染你的地图;请注意,如果地图可见,但它在屏幕外。然后显示它。

$('#gMap').appendTo('#visibleDiv');

您还可以避免重新渲染地图的笨拙,因为地图已经渲染。干净又活泼。

于 2017-10-15T23:25:16.737 回答
0

我不知道它是否适合您的解决方案,但解决方法是在显示时使用 jQuery 将您的地图元素附加到 div 并在隐藏时删除。不理想,但它可能是一个快速修复。

于 2016-06-02T15:06:00.977 回答