Javascript 谷歌地图没有完全加载
这是我的密码Javascript 谷歌地图没有完全加载,javascript,google-maps,google-api,Javascript,Google Maps,Google Api,这是我的密码 <script src="https://maps.google.com/maps/api/js?sensor=false&libraries=places" type="text/javascript"></script> <script> function initialize() { var myLatlng = new google.maps.LatLng(-33.8688, 151.2195);
<script src="https://maps.google.com/maps/api/js?sensor=false&libraries=places" type="text/javascript"></script>
<script>
function initialize() {
var myLatlng = new google.maps.LatLng(-33.8688, 151.2195);
var mapOptions = {
center: new google.maps.LatLng(-33.8688, 151.2195),
zoom: 17,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map_auto'), mapOptions);
var input = document.getElementById('event_input_auto');
var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo('bounds', map);
var infowindow = new google.maps.InfoWindow();
marker = new google.maps.Marker({
position: myLatlng,
map: map
});
/*new added*/
google.maps.event.addListener(map, 'center_changed', function() {
var location = map.getCenter();
//new added
placeMarker(location);
displayLocation(location.lat(),location.lng());
});
google.maps.event.addListener(map, 'zoom_changed', function() {
zoomLevel = map.getZoom();
});
google.maps.event.addListener(marker, 'dblclick', function() {
zoomLevel = map.getZoom()+1;
if (zoomLevel == 20) {
zoomLevel = 10;
}
map.setZoom(zoomLevel);
});
/*new added*/
google.maps.event.addListener(autocomplete, 'place_changed', function() {
$('#map_holder').show();
google.maps.event.addListenerOnce(map, 'idle', function(){
google.maps.event.trigger(map, 'resize');
map.setCenter(location);
});
infowindow.close();
var place = autocomplete.getPlace();
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17); // Why 17? Because it looks good.
}
//alert(autocomplete.getBounds());
var image = new google.maps.MarkerImage(
place.icon, new google.maps.Size(71, 71),
new google.maps.Point(0, 0), new google.maps.Point(17, 34),
new google.maps.Size(35, 35));
marker.setIcon(image);
marker.setPosition(place.geometry.location);
var address = '';
if (place.address_components) {
address = [
(place.address_components[0] &&
place.address_components[0].short_name || ''),
(place.address_components[1] &&
place.address_components[1].short_name || ''),
(place.address_components[2] &&
place.address_components[2].short_name || '')].join(' ');
}
infowindow.setContent('<div><b>' + place.name + '</b><br>' + address);
infowindow.open(map, marker);
});
// Sets a listener on a radio button to change the filter type on Places
// Autocomplete.
var setupClickListener = function(id, types) {
var radioButton = document.getElementById(id);
google.maps.event.addDomListener(radioButton, 'click', function() {
autocomplete.setTypes(types);
});
}
setupClickListener('changetype-all', []);
//setupClickListener('changetype-establishment', ['establishment']);
//setupClickListener('changetype-geocode', ['geocode']);
}
google.maps.event.addDomListener(window, 'load', initialize);
function placeMarker(location) {
var clickedLocation = new google.maps.LatLng(location);
marker.setPosition(location);
}
function displayLocation(latitude,longitude){
var request = new XMLHttpRequest();
var method = 'GET';
var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+latitude+','+longitude+'&sensor=true';
var async = true;
request.open(method, url, async);
request.onreadystatechange = function(){
if(request.readyState == 4 && request.status == 200){
var data = JSON.parse(request.responseText);
var address = data.results[0];
//document.write(address.formatted_address);
document.getElementById("event_input_auto").value = address.formatted_address;
}
};
request.send();
};
</script>
<input type="text" name="location" class="input-xxlarge required" id="event_input_auto" value="" />
<div id="map_holder" style="display: none;">
<div id="map_auto" style="height: 300px; width: 800px;" ></div>
</div>
函数初始化(){
var mylatng=new google.maps.LatLng(-33.8688151.2195);
变量映射选项={
中心:新google.maps.LatLng(-33.8688151.2195),
缩放:17,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById('map_auto'),mapOptions);
var input=document.getElementById('event_input_auto');
var autocomplete=new google.maps.places.autocomplete(输入);
autocomplete.bindTo('bounds',map);
var infowindow=new google.maps.infowindow();
marker=新的google.maps.marker({
职位:myLatlng,
地图:地图
});
/*新增*/
google.maps.event.addListener(map'center_changed',function(){
var location=map.getCenter();
//新增
地点标记(位置);
显示位置(location.lat(),location.lng());
});
google.maps.event.addListener(映射'zoom_changed',函数(){
zoomLevel=map.getZoom();
});
google.maps.event.addListener(标记'dblclick',function()){
zoomLevel=map.getZoom()+1;
如果(zoomLevel==20){
zoomLevel=10;
}
map.setZoom(zoomLevel);
});
/*新增*/
google.maps.event.addListener(自动完成,'place\u changed',函数(){
$('map#u holder')。show();
google.maps.event.addListenerOnce(map'idle',function(){
google.maps.event.trigger(映射,'resize');
地图设置中心(位置);
});
infowindow.close();
var place=autocomplete.getPlace();
if(place.geometry.viewport){
map.fitBounds(place.geometry.viewport);
}否则{
地图。设置中心(地点。几何。位置);
map.setZoom(17);//为什么是17?因为它看起来不错。
}
//警报(autocomplete.getBounds());
var image=new google.maps.MarkerImage(
place.icon,新的google.maps.Size(71,71),
新的google.maps.Point(0,0),新的google.maps.Point(17,34),
新google.maps.Size(35,35));
marker.setIcon(图像);
标记器.设置位置(位置.几何.位置);
var地址=“”;
if(位置、地址和组件){
地址=[
(地址为[0]&&
place.address_components[0]。缩写_name | |“”),
(地点、地址和组件[1]&&
place.address_components[1]。缩写为|||“”,
(地点、地址和组件[2]&&
place.address_components[2]。缩写_name | |“”)。join(“”);
}
infowindow.setContent(''+place.name+'
'+地址);
信息窗口。打开(地图、标记);
});
//在单选按钮上设置侦听器以更改位置上的筛选器类型
//自动完成。
var setupClickListener=函数(id、类型){
var radioButton=document.getElementById(id);
google.maps.event.addDomListener(单选按钮,'click',函数(){
自动完成。设置类型(类型);
});
}
setupClickListener('changetype-all',[]);
//setupClickListener('changetype-Establish',['Establish']);
//setupClickListener('changetype-geocode',['geocode']);
}
google.maps.event.addDomListener(窗口“加载”,初始化);
函数placeMarker(位置){
var clickedLocation=new google.maps.LatLng(位置);
标记器。设置位置(位置);
}
功能显示位置(纬度、经度){
var request=new XMLHttpRequest();
var方法='GET';
var url='1〕http://maps.googleapis.com/maps/api/geocode/json?latlng=“+纬度+”、“+经度+”&传感器=真”;
var async=true;
open(方法、url、异步);
request.onreadystatechange=函数(){
if(request.readyState==4&&request.status==200){
var data=JSON.parse(request.responseText);
var地址=数据。结果[0];
//文件。写入(地址。格式化的地址);
document.getElementById(“事件\输入\自动”)。值=地址。格式化\地址;
}
};
request.send();
};
当#Map_holder
为显示:块
但是当#map_holder
为display:none
时,我需要加载map。这是我的要求
我要做什么才能完全加载地图 来自文档
resize-当div
更改大小:google.maps.event.trigger(映射“调整大小”)
因此,在从文档resize中将显示更改为block后,请尝试
google.maps.event.trigger(映射,'resize')
,开发者应在地图上触发此事件
google.maps.event.addListenerOnce(map, 'idle', function(){
google.maps.event.trigger(map, 'resize');
map.setCenter(location);
});
在下面添加上面的代码
$('#map_holder').show();
详细说明您的要求完整地图未加载。我的意思是您要做的事情为什么需要显示:无覆盖显示:BlockOK,所以创建一个类似于按钮单击或键控的事件,以便您可以使用jquery更改其显示值听起来有点粗鲁,与其尝试建议的内容,不如先尝试您的代码。你应该试着调试你的代码,或者至少把问题解决。你不是有这个吗?我在20分钟前回答了这个问题,但我删除了它,因为我看到你已经有了它。我找到的是google.maps.event.addListenerOnce(map'idle',function(){google.maps.event.trigger(map'resize');map.setCenter(location);});他没有工作。现在我只使用了google.maps.event.trigger(映射“resize”);相反