关闭Google Maps API V3中的任何打开信息窗口

29
如标题所述,对于一个特定的事件(对我来说,这是在打开新的google.maps.InfoWindow时),我希望能够关闭任何其他当前打开的信息窗口。目前,我可以同时打开多个窗口...但我只想同时打开一个。
我是动态创建信息窗口的(即事先不知道将生成多少个),因此在当前信息窗口的单击事件中(我希望在其中关闭所有其他打开的窗口)我没有对任何其他打开的信息窗口的引用以调用close()。我想知道如何实现这一点。我不是一名有经验的JavaScript程序员,因此我不知道是否需要在此处使用反射或类似的东西。
最好的方法是保存所有引用到某种集合中,然后循环遍历列表并关闭它们吗?
谢谢。
6个回答

64

我遇到了同样的问题,通过创建一个全局信息窗口来解决了它。

var infowindow = new google.maps.InfoWindow();

然后我有一个函数,在点击监听器中执行以下操作:

function getInfoWindowEvent(marker) {
    infowindow.close()
    infowindow.setContent("This is where my HTML content goes.");
    infowindow.open(map, marker);
}

我认为这可以实现你想要的,因为现在地图上只有一个信息窗口,我只需要关闭它,重新加载内容,然后再为给定的标记打开它。


9
应该足够使用全局信息窗口,然后更改该信息窗口的位置和内容。
var infowindow = new google.maps.InfoWindow();

// Call this function to open an infowindow i.e. on click.
function respondToClick(latlng) {
  infowindow.setOptions({
    position: latlng,
    content" "Hello, world"
  });
}

由于每次使用相同的信息窗口,您保证只会有一个打开,并且它使用的资源/内存比创建和销毁多个信息窗口要少。

2

infowindow是局部变量,而window在close()时不可用。

var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow
 = null;

 ...

 google.maps.event.addListener(marker, 'click', function() {
     if (infowindow) {
         infowindow.close();
     }
     infowindow = new google.maps.InfoWindow();
     ... });
...

参考资料:如何关闭 Google Maps API v3 中的所有信息窗口


1
我已决定创建一个所有动态创建Infobox的数组。当您单击任何第一个时,遍历该数组,然后关闭所有打开的Infobox, 除了您单击的那一个。
var allInfos = [];

function closeInfos() {
        for (i = 0; i < allInfos.length; i++) {
            allInfos[i].close();
        }
}

一旦创建了信息框,您可以动态地将其添加到数组中,方法如下:
allInfos.push(infowindow);

1
你只需要一行代码: $(".gm-style-iw").next().click(); 在信息窗口中有一个带有“gm-style-iw”类的div。紧接着,是关闭按钮的div。因此,此代码将单击地图中存在的每个信息窗口关闭按钮。

1
你应该解释为什么以及如何解决这个问题。详情请参见这里 - jkalden
1
地图信息窗口中有一个类名为'gm-style-iw'的div。接着,就是关闭按钮的div。因此,这段代码将会点击地图上所有信息窗口的关闭按钮。 - André Amaral
它有效了,谢谢!不需要创建大量变量。 - djdance

0

我认为最好的方法是...拥有一个带有已打开信息窗口的对象

我有两个对象, infos包含所有创建的信息窗口,markers包含所有标记和它们的信息窗口 所以我只需执行这些函数来循环信息窗口对象并关闭所有信息窗口

function CloseInfowindows() {
  for (var mkey in infos) {
    var mobj = markers[mkey];
    mobj.infowindow.close();
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接