如何处理隐藏div内的谷歌地图(更新图片)

leo*_*ora 127 jquery google-maps google-maps-api-3

我有一个页面,谷歌地图首先在隐藏的div内.然后我点击链接后显示div,但只显示地图的左上角.

我尝试在点击后运行此代码:

    map0.onResize();
Run Code Online (Sandbox Code Playgroud)

要么:

  google.maps.event.trigger(map0, 'resize')
Run Code Online (Sandbox Code Playgroud)

有任何想法吗.这是我在看到隐藏地图的div后看到的图像.替代文字

小智 126

我遇到了同样的问题,并发现当显示div时,呼叫google.maps.event.trigger(map, 'resize');它似乎为我解决了问题.

  • 为了在调整大小后立即保留地图的原始中心,请考虑以这种方式扩展resize语句:var center = map.getCenter(); google.maps.event.trigger(map,'resize'); map.setCenter(中心); (64认同)
  • 不知道为什么,但我需要将解决方案包装在小的setTimeout中以使其工作:setTimeout(function(){google.maps.event.trigger(map,'resize')},100); (10认同)

Phi*_*lar 103

我自己测试过,这就是我接近它的方式.非常直截了当,如果您需要任何澄清,请告诉我

HTML

<div id="map_canvas" style="width:700px; height:500px; margin-left:80px;" ></div>
<button onclick="displayMap()">Show Map</button>
Run Code Online (Sandbox Code Playgroud)

CSS

<style type="text/css">
#map_canvas {display:none;}
</style>
Run Code Online (Sandbox Code Playgroud)

使用Javascript

<script>
function displayMap()
{
    document.getElementById( 'map_canvas' ).style.display = "block";
    initialize();
}
function initialize()
{
    // create the map
    var myOptions = {
    zoom: 14,
    center: new google.maps.LatLng( 0.0, 0.0 ),
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map( document.getElementById( "map_canvas" ),myOptions );
}
</script>
Run Code Online (Sandbox Code Playgroud)


小智 26

google.maps.event.trigger($("#div_ID")[0], 'resize');
Run Code Online (Sandbox Code Playgroud)

如果你没有可用的变量映射,它应该是div包含GMAP 的第一个元素(除非你做了一些愚蠢的事情).


Sim*_*ast 13

我在Bootstrap选项卡中有一个Google地图,但没有正确显示.这是我的修复.

// Previously stored my map object(s) in googleMaps array

$('a[href="#profileTab"]').on('shown', function() {   // When tab is displayed...
    var map = googleMaps[0],
        center = map.getCenter();
    google.maps.event.trigger(map, 'resize');         // fixes map display
    map.setCenter(center);                            // centers map correctly
});
Run Code Online (Sandbox Code Playgroud)


小智 7

调整div大小时如何刷新地图

仅仅打电话是不够的google.maps.event.trigger(map, 'resize');你也应该重置地图的中心.

var map;

var initialize= function (){
    ...
}

var resize = function () {
    if (typeof(map) == "undefined") {) {
        // initialize the map. You only need this if you may not have initialized your map when resize() is called.
        initialize();
    } else {
        // okay, we've got a map and we need to resize it
        var center = map.getCenter();
        google.maps.event.trigger(map, 'resize');
        map.setCenter(center);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何监听resize事件

角度(ng-show或ui-bootstrap崩溃)

直接绑定到元素的可见性而不是绑定到ng-show的值,因为$ watch可以在ng-show更新之前触发(因此div仍然是不可见的).

scope.$watch(function () { return element.is(':visible'); },
    function () {
        resize();
    }
);
Run Code Online (Sandbox Code Playgroud)

jQuery .show()

使用内置回调

$("#myMapDiv").show(speed, function() { resize(); });
Run Code Online (Sandbox Code Playgroud)

Bootstrap 3模态

$('#myModal').on('shown.bs.modal', function() {
    resize();
})
Run Code Online (Sandbox Code Playgroud)


Phi*_*nci 6

也可以只触发本机窗口调整大小事件.

Google地图会自动重新加载:

window.dispatchEvent(new Event('resize'));
Run Code Online (Sandbox Code Playgroud)


Car*_*los 5

我有同样的问题,google.maps.event.trigger(map, 'resize')不适合我.

我做的是在看到div...... 之后放一个计时器来更新地图

//CODE WORKING

var refreshIntervalId;

function showMap() {
    document.getElementById('divMap').style.display = '';
    refreshIntervalId = setInterval(function () { updateMapTimer() }, 300);
}

function updateMapTimer() {
    clearInterval(refreshIntervalId);
    var map = new google.maps.Map(....
    ....
}
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是更方便的方式,但它的工作原理!


Gus*_*avo 5

如果您通过复制/粘贴iframe代码插入了Google地图,并且您不想使用Google Maps API,那么这是一个简单的解决方案.只需在显示隐藏地图时执行以下javascript行.它只需要iframe HTML代码并将其插入到同一位置,因此它再次呈现:

document.getElementById("map-wrapper").innerHTML = document.getElementById("map-wrapper").innerHTML;
Run Code Online (Sandbox Code Playgroud)

jQuery版本:

$('#map-wrapper').html( $('#map-wrapper').html() );
Run Code Online (Sandbox Code Playgroud)

HTML:

....
<div id="map-wrapper"><iframe src="https://www.google.com/maps/..." /></div>
....
Run Code Online (Sandbox Code Playgroud)

以下示例适用于最初隐藏在Bootstrap 3选项卡中的地图:

<script>
$(document).ready( function() {

    /* Detects when the tab is selected */
    $('a[href="#tab-id"]').on('shown.bs.tab', function() {

        /* When the tab is shown the content of the wrapper
           is regenerated and reloaded */

        $('#map-wrapper').html( $('#map-wrapper').html() ); 

    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

  • 对于没有加载Google Map JS而只是使用iframe和src url`https://www.google.com/maps/embed/v1/place?..的人来说,这是最好的解决方案. (2认同)