只需在Google Maps API v3中打开一个InfoWindow

leo*_*leo 85 javascript google-maps google-maps-api-3

我需要在Google地图上只打开一个InfoWindow.在打开新的InfoWindows之前,我需要关闭所有其他InfoWindows.

有人能告诉我怎么做吗?

Dan*_*llo 150

您只需创建一个InfoWindow对象,保留对它的引用,并对所有标记重用if.从Google Maps API文档引用:

如果您只想一次显示一个信息窗口(就像Google地图上的行为一样),您只需要创建一个信息窗口,您可以在地图事件(例如用户点击)上重新分配到不同的位置或标记.

因此,您可能InfoWindow只想在初始化地图后创建对象,然后click按如下方式处理标记的事件处理程序.假设你有一个叫做的标记someMarker:

google.maps.event.addListener(someMarker, 'click', function() {
   infowindow.setContent('Hello World');
   infowindow.open(map, this);
});
Run Code Online (Sandbox Code Playgroud)

然后,InfoWindow当您单击新标记而不必调用该close()方法时,应自动关闭.


ska*_*arE 29

创建您的infowindow超出范围,以便您可以共享它.

这是一个简单的例子:

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);
  });
}
Run Code Online (Sandbox Code Playgroud)


Fer*_*acs 12

我有同样的问题,但最好的答案并没有完全解决它,我在我的声明中所做的是使用与我当前标记相关的这个.也许这有助于某人.

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);                 
}
Run Code Online (Sandbox Code Playgroud)

  • 你传递contentString的方式对我很有用,谢谢. (2认同)

use*_*958 5

有点晚了,但我设法通过将 infowindow 设为全局变量只打开了一个信息窗口。

var infowindow = new google.maps.InfoWindow({});
Run Code Online (Sandbox Code Playgroud)

然后在监听器里面

infowindow.close();
infowindow = new google.maps.InfoWindow({   
    content: '<h1>'+arrondissement+'</h1>'+ gemeentesFiltered                           
});

infowindow.open(map, this);
Run Code Online (Sandbox Code Playgroud)