Google Maps API v3信息窗口关闭事件/回调?


76

我想跟踪在Google Maps界面上打开的所有信息窗口(我将它们的名称存储在数组中),但是当它们通过“ x”关闭时,我不知道如何从数组中删除它们。在每个右上角。

我可以听某种回调吗?或者也许我可以做类似的事情 addListener("close", infowindow1, etc

Answers:


13

我在这里找到的唯一一致的解决方案是保留指向的指针,infoWindow.getMap()在需要验证是否已关闭时检查其方法。

这样做的原因是,单击另一个元素会导致infoWindow由于其他原因而被关闭...而不会closeclick触发事件。

var infoWindow = new google.maps.InfoWindow({ content: 'Something to put here.' });
infoWindow.open(map, infoWindow);

setInterval(function ()
{
    console.log("infoWindow is bound to map: "+(infoWindow.getMap() ? true : false));

}, 1000);

...如果您只在乎是否infoWindow使用“ X”按钮将其关闭,则可以进行监视closeclick。但是,还有其他原因可能已经关闭或已经关闭。


这个答案应该有更多的支持。它给出了更多细节,并简洁明了地说明了这一点
bermick

172

有一个信息窗口呼叫事件closeclick可以帮助您

var currentMark;
var infoWindow = new google.maps.InfoWindow({
            content: 'im an info windows'
        });
google.maps.event.addListener(marker, 'click', function () {
          infoWindow.open(map, this);
          currentMark = this;

});
google.maps.event.addListener(infoWindow,'closeclick',function(){
   currentMark.setMap(null); //removes the marker
   // then, remove the infowindows name from the array
});

3
请注意,当单击附近的另一个标记并且该标记自动关闭时,例如当滚动以确保信息窗口在地图的可见范围内时,这不会触发。
本·吉尔

1

简化和扩展最受争议的解决方案,您可以在处理标记单击事件期间创建标记,让您打包由于x图标closeclick事件而同时将其删除。

这是一个示例,其中包括通过hasInfoWindow在标记上添加布尔状态来避免重复的信息窗口创建。

  newMarker.addListener('click', function () {
    // If a marker does not yet have an info window, create and show it
    if (newMarker['hasInfoWindow'] !== true) {
      newInfoWindow = new google.maps.InfoWindow({content: infoContent}); 
      mapSet['infoWindowsObj'].push(newInfoWindow);
      newMarker['hasInfoWindow'] = true;
      newInfoWindow.open(mapSet, newMarker);

      // If info window is dismissed individually, fully remove object
      google.maps.event.addListener(newInfoWindow, 'closeclick', function () {
        newInfoWindow.setMap(null);
        newMarker['hasInfoWindow'] = false;
        mapSet['infoWindowsObj'].filter(arrayItem => arrayItem !== newInfoWindow);
      });
    }
  });

然后,如果您要由于地图上的点击事件而删除所有打开的信息窗口,则可以遍历的内容mapSet['infoWindowsObj']以完全删除每个窗口。

我相信这种行为可以让您在大多数情况下都无需使用infowindow,而不必按照google的自定义弹出窗口示例重新实现整个过程。


0

试试这个:

var closeBtn = $('.gm-style-iw').next();
closeBtn.click(function(){
    //other things you want to do when close btn is click
    that.infowindow.close();
});

我覆盖了此click函数,因为在更改了它的css /位置后,单击按钮在safari中不起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.