我喜欢跟踪在我的Google Maps界面上打开的所有信息窗口(我将它们的名称存储在一个数组中),但是当它们通过每个窗口右上角的"x“关闭时,我不知道如何从我的数组中删除它们。
有没有什么我可以监听的回调?或者我可以做一些像addListener("close", infowindow1, etc
这样的事情?
发布于 2016-11-20 23:27:15
我在这里找到的唯一一致的解决方案是保留指向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);
..。如果您只关心是否使用"X“按钮关闭了infoWindow
,那么监视closeclick
也没问题。然而,它可能关闭或已经关闭还有其他原因。
发布于 2011-07-21 22:41:42
有一个名为closeclick
的infowindows事件可以帮助您
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
});
发布于 2020-04-28 10:08:10
为了简化和扩展most upvoted solution,您可以在处理标记单击事件期间创建标记,允许您同时打包由于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而不必按照谷歌的custom popup example重新实现整个事情。
https://stackoverflow.com/questions/6777721
复制相似问题