Simplifier et étendre le solution la plus votée vous pouvez créer le marqueur pendant le traitement de l'événement de clic sur le marqueur, ce qui vous permet d'organiser sa suppression en raison de l'utilisation de l'icône x. closeclick
en même temps.
Voici un exemple qui permet d'éviter la création de fenêtres d'information en double en ajoutant un booléen. hasInfoWindow
le statut des marqueurs.
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);
});
}
});
Ensuite, si vous voulez supprimer toutes les fenêtres d'information ouvertes en raison d'un événement de clic sur une carte, vous pouvez itérer à travers le contenu du fichier mapSet['infoWindowsObj']
pour les retirer complètement.
Je pense que ce comportement vous permet d'utiliser infowindow dans la plupart des cas sans avoir à réimplémenter l'ensemble de l'application comme le préconise Google. exemple de popup personnalisée .