Avoir juste une InfoWindow ouvrir dans Google Maps API v3
J'ai besoin d'avoir un seul InfoWindow ouvrir sur mon Google Map. J'ai besoin de fermer toutes les autres InfoWindows avant d'ouvrir une nouvelle.
Quelqu'un peut me montrer comment faire cela?
- Qu'avez-vous essayé?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de créer un
InfoWindow
objet, de conserver une référence à elle, et de réutiliser si pour tous les marqueurs. Citant l'API Google Maps Docs:Par conséquent, vous pouvez simplement créer la
InfoWindow
objet juste après l'initialisation de votre carte, puis de gérer leclick
les gestionnaires d'événements de vos marqueurs comme suit. Disons que vous avez un marqueur appelésomeMarker
:Puis le
InfoWindow
doit fermer automatiquement lorsque vous cliquez sur un marqueur sans avoir à appeler leclose()
méthode.Créer votre infowindow hors de la portée, de sorte que vous pouvez partager.
Voici un exemple simple:
J'ai eu le même problème, mais la meilleure réponse ne résout pas complètement, ce que j'ai eu à faire dans ma déclaration a été à l'aide de la ce relatives à mon marqueur actuel. Peut-être que cela aide quelqu'un.
un peu en retard, mais j'ai réussi à avoir un seul infowindow ouvert par maken infowindow une variable globale.
à l'intérieur de l'listner
Déclarer un globar
var selectedInfoWindow;
et utilisez-le pour maintenir l'ouverture de la fenêtre info:Vous avez besoin de garder une trace de vos précédents InfoWindow objet
et l'appel de la près méthode sur elle quand vous gérer l'événement de clic sur un marqueur.N. B Il n'est pas nécessaire d'appeler à proximité de l'info de la fenêtre de l'objet, l'appel de l'ouvrir avec un autre marqueur de fermer automatiquement l'original. Voir La réponse de Daniel pour plus de détails.
close()
méthode, si un seulInfoWindow
objet est utilisé. Il se ferme automatiquement si leopen()
méthode est appelée de nouveau sur le même objet.Fondamentalement, vous voulez une fonction qui maintient la référence à une
new InfoBox()
=> déléguer l'événement onclick.Lors de la création de vos marqueurs (dans une boucle) utilisation
bindInfoBox(xhr, map, marker);
var infoBox
est attribué de manière asynchrone et conservé en mémoire. Chaque fois que vous appelezbindInfoBox()
le retour de la fonction sera appelée à la place. Également à portée de main pour passer leinfoBoxOptions
qu'une seule fois!Dans mon exemple, j'ai dû ajouter un paramètre à la
map
que mon initialisation est retardée par l'onglet événements.InfoBoxOptions
Voici une solution qui n'a pas besoin de créer un seul infoWindow pour les réutiliser. Vous pouvez continuer à créer de nombreux infoWindows, la seule chose que vous avez besoin est de construire un closeAllInfoWindows fonction, et de l'appeler avant d'ouvrir un nouveau infowindow.
Donc, en gardant votre code, il vous suffit de:
Créer un réseau mondial de stocker toutes les infoWindows
Stocker chaque nouveau infoWindow dans le tableau, juste après la bulle informative = new...
Créer le closeAllInfoWindows fonction
Dans votre code, appelez-la pour closeAllInfoWindows() juste avant d'ouvrir la infoWindow.
Ce qui concerne,
Résolu de cette façon:
Google Maps vous permet d'avoir un seul info fenêtre ouverte. Donc, si vous ouvrez une nouvelle fenêtre, puis l'autre se ferme automatiquement.