谷歌地图 API v3 inowwindow 关闭事件/回调?

我喜欢跟踪任何和所有在我的谷歌地图界面上打开的信息窗口(我把它们的名字存储在一个数组中) ,但是当它们通过每个窗口右上角的“ x”关闭时,我不知道如何从我的数组中删除它们。

有没有什么回复我可以听的? 或者我可以做些类似 addListener("close", infowindow1, etc

73149 次浏览

有一个 inowindows 调用 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
});

我在这里找到的唯一一致的解决方案是保留一个指向 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是罚款。然而,还有其他原因,它可能是或已经关闭。

试试这个:

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/位置之后,click 按钮在 safari 中不起作用。

通过简化和扩展 最赞成的解决方案,您可以在处理标记 click 事件期间创建标记,同时可以将由于 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']的内容来完全删除每个窗口。

我相信这种行为可以让你在大多数情况下使用 inowwindow,而不必按照 google 的 自定义弹出窗口示例重新实现所有的东西。

这是一个非常简单的查找关闭窗口按钮的类,即’. gm-ui-hover-effect’

关闭信息窗口的触发器

$(’. gm-ui-hover-effect’)触发器(‘ click’) ;

infoWindow.addListener('closeclick', ()=>{
// Handle focus manually.
});