Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 隐藏Google Maps v3地图,需要时显示_Google Maps_Google Maps Api 3 - Fatal编程技术网

Google maps 隐藏Google Maps v3地图,需要时显示

Google maps 隐藏Google Maps v3地图,需要时显示,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,有没有办法阻止谷歌地图(JS,v3)从一开始就显示出来?我正在进行一些预处理,并希望显示我的“加载”微调器,直到一切正常为止(更合理地说,隐藏地图——例如容器div——直到所有预处理完成——此时,显示地图) 连接地图的idle事件没有多大帮助,因为当该事件发生时,地图已经显示 我知道容器div在加载后会被GMaps内联样式化,我的第一个想法是清除style属性(同时收听idle事件),但如果有一种方法可以创建地图,并且在所有预处理完成之前不显示它,那将是一件有趣的事情 可能通过使用新的googl

有没有办法阻止谷歌地图(JS,v3)从一开始就显示出来?我正在进行一些预处理,并希望显示我的“加载”微调器,直到一切正常为止(更合理地说,隐藏地图——例如容器
div
——直到所有预处理完成——此时,显示地图)

连接地图的
idle
事件没有多大帮助,因为当该事件发生时,地图已经显示

我知道容器
div
在加载后会被GMaps内联样式化,我的第一个想法是清除
style
属性(同时收听
idle
事件),但如果有一种方法可以创建地图,并且在所有预处理完成之前不显示它,那将是一件有趣的事情

可能通过使用
新的google.maps.Map
构造函数的参数,或者使用
映射选项

有什么想法吗

提前谢谢你

还记得打电话给:

google.maps.event.trigger(map, 'resize');
如果您更改了
的大小。
显示:无
没有大小。

更好的方法:

gmap.redraw = function() {
    gmOnLoad = true;
    if(gmOnLoad) {
        google.maps.event.trigger(gmap, "resize");
        gmap.setCenter(gmlatlng);
        gmOnLoad = false;
    }
}
在show click事件中:

$("#goo").click(function() {
  if ($("#map_canvas").css("display") == "none") {
    $("#YMapsID").toggle();
    $("#map_canvas").toggle();
    if (gmap != undefined) {
        gmap.redraw();
    }
  }
});

根据您正在做的事情,另一个可能性可能是在每个进程完成时将多个bool设置为true

例如:

如果您有一个要等待的地理代码服务正在运行,那么可以调用一个var 地质状态

在地理编码器的结果部分,将GeoState设置为true,
然后使用定时函数检查是否所有服务都返回true,当它们返回true时,使地图可见。

这对我很有用。我正在使用JQuery库

$(document).ready(function(){
    $('#Checkbox').click(function(){
        $('#googleMapDiv').toggle();
        initialize(); // initialize the map
    });
});

或者你可以用css可视性或css不透明度来隐藏它

$("#GoogleMap").css({ opacity: 0, zoom: 0 });
initialize();

google.maps.event.addListener(map,"idle", function(){ 
     $('#Loader').hide();
     $("#GoogleMap").css({ opacity: 1, zoom: 1 });
}); 

这对我来说很好,我使用jquery选项卡

setTimeout(function() {
        google.maps.event.trigger(map, "resize");
        map.setCenter(new google.maps.LatLng(default_lat, default_lng));
        map.setZoom(default_map_zoom);
    }, 2000);
通过此链接,这将起作用

    google.maps.event.addListener(map, "idle", function ()
    {
        google.maps.event.trigger(map, 'resize');
    });

当贴图第一次渲染
时,显示隐藏贴图的另一种方法是设置样式:可见性

首次隐藏时,使用
可见性=隐藏
;要显示,请使用
visibility=visible


原因是:

我使用了$(“#map_canvas”).attr(“样式”、“位置:相对;可见性:隐藏”)技巧,有效。正如Dr1Ku所说。将贴图渲染为不可见的div,然后在第一个空闲事件中显示该div。一定要使用addListenerOnce。我认为这个临时解决方案总比什么都没有好。这对我来说只是部分解决方案。我还必须调用
map.fitbunds(bounds)
where bounds是正确的LatLngBounds对象。除了matt所说的之外,您还可以使用
panTo(location)
重新居中地图。@dtanders这是一个多么棒的添加!嘿,加布里埃尔。感谢您提供这一令人惊讶的简单有效的解决方案。工作起来很有魅力!请注意,这可能会每次重新加载地图,而使用maps API v3,每天加载地图元素的次数有一个限制。不透明度:0成功了,我试图显示:无,但效果不好