我只需要在我的 Google 地图上打开一个 InfoWindow。在打开一个新的 InfoWindows 之前,我需要关闭所有其他 InfoWindows。
有人可以告诉我如何做到这一点吗?
我只需要在我的 Google 地图上打开一个 InfoWindow。在打开一个新的 InfoWindows 之前,我需要关闭所有其他 InfoWindows。
有人可以告诉我如何做到这一点吗?
您只需要创建一个InfoWindow
对象,保留对它的引用,并为所有标记重用 if。引自 Google Maps API Docs:
如果您只想一次显示一个信息窗口(就像 Google 地图上的行为一样),您只需要创建一个信息窗口,您可以根据地图事件(例如用户点击)将其重新分配到不同的位置或标记。
因此,您可能InfoWindow
只想在初始化地图后立即创建对象,然后click
按如下方式处理标记的事件处理程序。假设您有一个名为 的标记someMarker
:
google.maps.event.addListener(someMarker, 'click', function() {
infowindow.setContent('Hello World');
infowindow.open(map, this);
});
然后,InfoWindow
当您单击新标记时,它应该会自动关闭,而无需调用该close()
方法。
在范围之外创建您的信息窗口,以便您可以共享它。
这是一个简单的例子:
var markers = [AnArrayOfMarkers];
var infowindow = new google.maps.InfoWindow();
for (var i = 0, marker; marker = markers[i]; i++) {
google.maps.event.addListener(marker, 'click', function(e) {
infowindow.setContent('Marker position: ' + this.getPosition());
infowindow.open(map, this);
});
}
我有同样的问题,但最好的答案并没有完全解决它,我在 for 语句中必须做的是使用与我当前标记相关的 this 。也许这对某人有帮助。
for(var i = 0; i < markers.length; i++){
name = markers[i].getAttribute("name");
address = markers[i].getAttribute("address");
point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
contentString = '<div style="font-family: Lucida Grande, Arial, sans-serif;>'+'<div><b>'+ name +'</b></div>'+'<div>'+ address +'</div>';
marker = new google.maps.Marker({
map: map,
position: point,
title: name+" "+address,
buborek: contentString
});
google.maps.event.addListener(marker, 'click', function(){
infowindow.setContent(this.buborek);
infowindow.open(map,this);
});
marker.setMap(map);
}
有点晚了,但我设法通过将 infowindow 设为全局变量只打开了一个信息窗口。
var infowindow = new google.maps.InfoWindow({});
然后在监听器里面
infowindow.close();
infowindow = new google.maps.InfoWindow({
content: '<h1>'+arrondissement+'</h1>'+ gemeentesFiltered
});
infowindow.open(map, this);
声明一个全局变量var selectedInfoWindow;
并使用它来保存打开的信息窗口:
var infoWindow = new google.maps.InfoWindow({
content: content
});
// Open the infowindow on marker click
google.maps.event.addListener(marker, "click", function() {
//Check if there some info window selected and if is opened then close it
if (selectedInfoWindow != null && selectedInfoWindow.getMap() != null) {
selectedInfoWindow.close();
//If the clicked window is the selected window, deselect it and return
if (selectedInfoWindow == infoWindow) {
selectedInfoWindow = null;
return;
}
}
//If arrive here, that mean you should open the new info window
//because is different from the selected
selectedInfoWindow = infoWindow;
selectedInfoWindow.open(map, marker);
});