谷歌地图,在点击按钮而不是页面加载时初始化和获取地图
Google Maps, initialize and fetch map when clicking button and not on page load
我创建了两个小提琴:
第一个 (https://jsfiddle.net/az5tk8ns/5/) 运行良好,并在页面加载时使用以下语法进行初始化: google.maps.event.addDomListener(window, 'load', initialize);
第二个小提琴(https://jsfiddle.net/az5tk8ns/8/)是完全相同的代码,只是谷歌画布和相关HTML包含在默认情况下隐藏的DIV中。我单击按钮以取消隐藏div 并初始化地图。 initialize();
问题是 API 中的地图部分工作得很好,因为我可以看到 API 计算的源、目的地和距离,我只是无法看到地图。
我与初始化调用有什么关系,以确保正确显示谷歌 MPA。
整个初始化语法为:
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(-28.5710903,26.0826083);
var mapOptions = {
zoom: 7,
center: chicago
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
directionsDisplay.setMap(map);
calcRoute();
}
一如既往地感谢您的帮助
你的问题不在于代码,而在于 CSS:
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
<div id="testdiv">
没有尺寸。 将其更改为对我有用:
html,body, #map-canvas, #testdiv {
height: 100%;
margin: 0px;
padding: 0px
}
概念验证小提琴
代码片段:
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(-28.5710903, 26.0826083);
var mapOptions = {
zoom: 7,
center: chicago
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
directionsDisplay.setMap(map);
calcRoute();
}
var origin = "pietermaritzburg, south africa",
destinations = ["", "durban, south africa", "amanzimtoti, south africa", "ixopo, south africa"]
service = new google.maps.DistanceMatrixService();
function calcRoute() {
var waypts = [];
for (var i = 1; i < destinations.length - 1; i++) {
waypts.push({
location: destinations[i],
stopover: true
});
}
var request = {
origin: origin,
destination: destinations[destinations.length - 1],
waypoints: waypts,
optimizeWaypoints: true,
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
var orig = document.getElementById("orig"),
dest = document.getElementById("dest"),
dist = document.getElementById("dist");
orig.value = response.routes[0].legs[0].start_address;
dest.value = response.routes[0].legs[0].end_address;
var total_distance = 0.0;
for (var i = 0; i < response.routes[0].legs.length; i++) {
total_distance += response.routes[0].legs[i].distance.value;
}
dist.value = total_distance + " meters";
}
});
}
function testmap() {
$('#testdiv').show();
initialize();
}
html,
body,
#map-canvas,
#testdiv {
height: 100%;
margin: 0px;
padding: 0px
}
#panel {
position: absolute;
top: 5px;
left: 50%;
margin-left: -180px;
z-index: 5;
background-color: #fff;
padding: 5px;
border: 1px solid #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div style='display:none' id="testdiv">
<div id="map-canvas"></div>
<div id="mileage-details">Origin:
<input id="orig" type="text" style="width:35em">
<br>
<br>Destination:
<input id="dest" type="text" style="width:35em">
<br>
<br>Distance:
<input id="dist" type="text" style="width:35em">
</div>
</div>
<input type="button" onclick='testmap()' value="getmap">
相关文章:
- 使用javascript函数在页面初始化后加载jquery
- 对插件初始化后动态加载的元素进行样式设置
- 如何在加载完所有脚本后初始化angular
- 加载初始网站后在后台加载数据
- Angular应用程序不加载初始页面
- 最轻的js/css,用于向用户提供SPA正在加载/初始化的视觉反馈
- 只想在页面上未加载初始数据时显示加载gif
- 如何在redux sagas完成之前通过meta标签加载初始存储数据
- 加载初始文件后无法加载其他文件
- 在 angularjs 应用程序中加载初始数据
- API V3 上的 Google Maps ClusterManager 在重新加载/初始加载时不起作用
- angular js在上下文中加载初始数据
- 在Backbone.js中加载初始数据
- 当我的angularjs应用程序启动时,有没有办法防止加载初始状态
- 使用angularjs应用登录后加载初始数据
- 在Angular中重新加载/初始化事件控制器
- Ajax调用的服务器端重新加载初始化
- 如何仅在加载初始结果集后接收Meteor集合回调
- React-通过AJAX加载初始列表
- 在Firefox中加载初始化脚本的能力