首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >谷歌地图应用程序接口v3信息窗口关闭事件/回调?

谷歌地图应用程序接口v3信息窗口关闭事件/回调?
EN

Stack Overflow用户
提问于 2011-07-21 22:31:19
回答 6查看 70.2K关注 0票数 77

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

有没有什么我可以监听的回调?或者我可以做一些像addListener("close", infowindow1, etc这样的事情?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-11-20 23:27:15

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

这样做的原因是,单击另一个元素可能会导致infoWindow因其他原因而被取消...而不触发closeclick事件。

代码语言:javascript
复制
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);

..。如果您只关心是否使用"X“按钮关闭了infoWindow,那么监视closeclick也没问题。然而,它可能关闭或已经关闭还有其他原因。

票数 14
EN

Stack Overflow用户

发布于 2011-07-21 22:41:42

有一个名为closeclick的infowindows事件可以帮助您

代码语言:javascript
复制
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
});
票数 177
EN

Stack Overflow用户

发布于 2020-04-28 10:08:10

为了简化和扩展most upvoted solution,您可以在处理标记单击事件期间创建标记,允许您同时打包由于x图标的closeclick事件而删除的标记。

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

代码语言:javascript
复制
  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而不必按照谷歌的custom popup example重新实现整个事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6777721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档