如何在点击其他标记时将Google贴上api close infowindow?

时间:2018-04-02 14:58:29

标签: javascript google-maps google-maps-api-3 google-maps-markers

当我点击地图中的其他地方或其他标记时,我希望关闭该信息窗口。也就是说,只有一个infowindow同时打开,所有其他infowindow都关闭。 但我是怎么做到的?

感谢您的回答!

我的代码:

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);
    });
  }
}

2 个答案:

答案 0 :(得分:1)

要一次只打开1个信息窗口,请创建一个包含单个InfoWindow实例的全局变量。

var infoWindow;

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

infoWindow = new google.maps.InfoWindow();

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);
    });
  }
}

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

map.addListener('click', function() {
    if (infoWindow) infoWindow.close();
});

以下是a JSBin的工作示例。

答案 1 :(得分:0)

您可以将全局变量用于infoWindow并检查是否已经分配了 如果这是真的那么关闭并打开另一个

public class MainTest2{
    public static void main(String args[]){
        try{
            Test t2 = new Test();
            t2.a();
            System.out.println("executing main1 ");
        }catch (Exception e){
            System.out.println("exception caught in main");
        }
        System.out.println("ending main ");
    }
}