单击其他标记时如何使用 Google Maps API 关闭信息窗口?

all*_*llu 1 javascript google-maps google-maps-api-3 google-maps-markers

当我单击地图中的其他位置或其他标记时,我希望关闭该信息窗口。即,同时只有一个信息窗口打开,所有其他信息窗口都关闭。

但我该怎么办呢?

我的代码:

var map = new google.maps.Map(document.getElementById('map'), options);

addMarker({
  coords: { lat: 62.791711, lng: 22.808479 },
  content: 'test 1'
});
addMarker({
  coords: { lat: 65.799962, lng: 24.497773 },
  content: 'test 2'
});
addMarker({
  coords: { lat: 62.331629, lng: 22.890667 },
  content: 'test 3'
});

function addMarker(props) {
  var marker = new google.maps.Marker({
    position: props.coords,
    map: map
  });

  if (props.content) {
    var infoWindow = new google.maps.InfoWindow({
      content: props.content
    });

    marker.addListener('click', function() {
      infoWindow.open(map, marker);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

Iav*_*vor 5

要一次仅打开一个信息窗口,请创建一个全局变量来保存单个 InfoWindow 实例。

var infoWindow;
Run Code Online (Sandbox Code Playgroud)

然后,在初始化函数 ( initMap) 中,实例化信息窗口:

infoWindow = new google.maps.InfoWindow();
Run Code Online (Sandbox Code Playgroud)

将您的函数更改addMarker为以下内容:

function addMarker(props) {
  var marker = new google.maps.Marker({
    position: props.coords,
    map: map
  });

  if (props.content) {
    marker.addListener('click', function() {
      infoWindow.setContent(props.content);
      infoWindow.open(map, marker);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您想在用户单击地图时关闭信息窗口,您可以将此事件侦听器添加到地图中:

map.addListener('click', function() {
    if (infoWindow) infoWindow.close();
});
Run Code Online (Sandbox Code Playgroud)

这是一个带有工作示例的JSBin 。