我想跟踪在Google Maps界面上打开的所有信息窗口(我将它们的名称存储在数组中),但是当它们通过“ x”关闭时,我不知道如何从数组中删除它们。在每个右上角。
我可以听某种回调吗?或者也许我可以做类似的事情
addListener("close", infowindow1, etc
?
Answers:
我在这里找到的唯一一致的解决方案是保留指向的指针,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
。但是,还有其他原因可能已经关闭或已经关闭。
有一个信息窗口呼叫事件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
});
简化和扩展最受争议的解决方案,您可以在处理标记单击事件期间创建标记,让您打包由于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的自定义弹出窗口示例重新实现整个过程。