Google maps 谷歌地图API关闭信息窗口(自动)
有人对如何在单击另一个标记时自动关闭信息窗口有什么建议吗?当前,用户在单击其他标记时必须手动关闭信息框。我希望有一种方法可以很容易地融入到我的代码中。看起来我正在为每个标记创建单独的信息框。当我们去扩大这个项目,我们将有10公里以上的标记,将由不同的类别分开 我读过关于创建一个信息窗口然后更改内容的建议,但是如果我正确理解了我的代码,我将为每个标记创建单独的信息框,因为它们来自XML文件。如何将此技术与当前代码结合起来 您可以在此处找到我的项目的实例: 下面是我的示例代码:Google maps 谷歌地图API关闭信息窗口(自动),google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,有人对如何在单击另一个标记时自动关闭信息窗口有什么建议吗?当前,用户在单击其他标记时必须手动关闭信息框。我希望有一种方法可以很容易地融入到我的代码中。看起来我正在为每个标记创建单独的信息框。当我们去扩大这个项目,我们将有10公里以上的标记,将由不同的类别分开 我读过关于创建一个信息窗口然后更改内容的建议,但是如果我正确理解了我的代码,我将为每个标记创建单独的信息框,因为它们来自XML文件。如何将此技术与当前代码结合起来 您可以在此处找到我的项目的实例: 下面是我的示例代码: <!DOCT
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<meta charset="UTF-8">
<title>A Basic Map</title>
<style>
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
function infoCallback(infowindow, marker) {
return function() { infowindow.open(map, marker); };
}
function initMap() {
var mapOptions = {
zoom: 3,
center: new google.maps.LatLng(37.5, -122),
mapTypeId: 'roadmap'
};
var map = new google.maps.Map(document.getElementById('map'), mapOptions);
$.ajax({
type: "GET",
async: true,
url: "testxml.xml",
dataType: "xml",
success:
function (xml) {
var places = xml.documentElement.getElementsByTagName("place");
for (var i = 0; i < places.length; i++) {
var lat = places[i].getAttribute('latitude');
var long = places[i].getAttribute('longitude');
var category = places[i].getAttribute('Info');
var latLng = new google.maps.LatLng(lat, long);
var marker = new google.maps.Marker({
position: latLng,
map: map,
category:places[i].info,
label:places[i].name
});
var infowindow = new google.maps.InfoWindow({
content:category});
google.maps.event.addListener(marker, 'click', infoCallback(infowindow,marker));
}
}
}
);
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCz_-TAwsP-dL_dsEkmz8sGEU1hyPYKHik&callback=initMap">
</script>
</body>
</html>
要修改代码以使用单个infowindow,将其移动到单击的标记并更新其内容以反映该标记的数据,请更改infoCallback以将内容作为第一个参数:
function infoCallback(content, marker) {
return function() {
infowindow.setContent(content);
infowindow.open(map, marker);
};
}
var infowindow;
function initMap() {
infowindow = new google.maps.InfoWindow();
// ...
然后像这样使用它:
var places = xml.documentElement.getElementsByTagName("place");
for (var i = 0; i < places.length; i++) {
var lat = places[i].getAttribute('latitude');
var long = places[i].getAttribute('longitude');
var category = places[i].getAttribute('Info');
var latLng = new google.maps.LatLng(lat, long);
var marker = new google.maps.Marker({
position: latLng,
map: map,
category: places[i].info,
label: places[i].name
});
google.maps.event.addListener(marker, 'click', infoCallback(category, marker));
}
函数infoCallbackcontent,marker{
返回函数{
infowindow.setContentcontent;
infowindow.openmap,标记;
};
}
var信息窗口;
函数初始化映射{
infowindow=新建google.maps.infowindow;
变量映射选项={
缩放:3,
中心:新谷歌。地图。LatLng37.5,-122,
mapTypeId:“路线图”
};
var map=new google.maps.Mapdocument.getElementById'map',mapOptions;
var bounds=new google.maps.LatLngBounds;
var xml=parsexmlstr;
var places=xml.documentElement.getElementsByTagNameplace;
对于变量i=0;i