Ich muss nur ein InfoWindow auf meiner Google Map geöffnet haben. Ich muss alle anderen InfoWindows schließen, bevor ich ein neues öffne.
Kann mir jemand zeigen, wie das geht?
Ich muss nur ein InfoWindow auf meiner Google Map geöffnet haben. Ich muss alle anderen InfoWindows schließen, bevor ich ein neues öffne.
Kann mir jemand zeigen, wie das geht?
Antworten:
Sie müssen nur ein
InfoWindow
Objekt erstellen , einen Verweis darauf behalten und es für alle Markierungen wiederverwenden. Zitieren aus den Google Maps API-Dokumenten :Daher möchten Sie das
InfoWindow
Objekt möglicherweise einfach direkt nach der Initialisierung Ihrer Karte erstellen und dann dieclick
Ereignishandler Ihrer Markierungen wie folgt behandeln. Angenommen, Sie haben einen Marker namenssomeMarker
:Dann
InfoWindow
sollte sich das automatisch schließen, wenn Sie auf eine neue Markierung klicken, ohne dieclose()
Methode aufrufen zu müssen .quelle
Erstellen Sie Ihr Infofenster außerhalb des Bereichs, damit Sie es freigeben können.
Hier ist ein einfaches Beispiel:
quelle
Ich hatte das gleiche Problem, aber die beste Antwort löste es nicht vollständig. Was ich in meiner for-Anweisung tun musste, war, dies in Bezug auf meinen aktuellen Marker zu verwenden. Vielleicht hilft das jemandem.
quelle
ein bisschen spät, aber ich habe es geschafft, nur ein Infofenster zu öffnen, indem ich infowindow zu einer globalen Variablen gemacht habe.
dann im Listener
quelle
Deklarieren Sie einen Globar
var selectedInfoWindow;
und verwenden Sie ihn, um das geöffnete Infofenster zu halten:quelle
Sie müssen Ihr vorheriges InfoWindow- Objekt verfolgen
und die Methode close aufrufen , wenn Sie dasKlickereignisfür eine neue Markierung behandeln.Hinweis: Es ist nicht erforderlich, close für das Objekt des freigegebenen Infofensters aufzurufen. Wenn Sie open mit einer anderen Markierung aufrufen, wird das Original automatisch geschlossen. Siehe Daniels Antwort für Details.
quelle
close()
Methode aufzurufen , wenn ein einzelnesInfoWindow
Objekt verwendet wird. Es wird automatisch geschlossen, wenn dieopen()
Methode für dasselbe Objekt erneut aufgerufen wird.Grundsätzlich möchten Sie eine Funktion, die auf eins verweist
new InfoBox()
=> das onclick-Ereignis delegieren. Verwenden Sie beim Erstellen Ihrer Marker (in einer Schleife)bindInfoBox(xhr, map, marker);
var infoBox
wird asynchron zugewiesen und gespeichert. Jedes Mal, wenn SiebindInfoBox()
die Rückgabefunktion aufrufen, wird stattdessen aufgerufen. Auch praktisch, um dasinfoBoxOptions
nur einmal zu bestehen!In meinem Beispiel musste ich dem einen zusätzlichen Parameter hinzufügen,
map
da meine Initialisierung durch Registerkartenereignisse verzögert wird.InfoBoxOptions
quelle
Hier ist eine Lösung, bei der nicht nur ein infoWindow erstellt werden muss, um es wiederzuverwenden. Sie können weiterhin viele infoWindows erstellen. Sie müssen lediglich eine closeAllInfoWindows-Funktion erstellen und diese aufrufen, bevor Sie ein neues Infowindow öffnen. Wenn Sie also Ihren Code behalten, müssen Sie nur:
Erstellen Sie ein globales Array, um alle infoWindows zu speichern
Speichern Sie jedes neue infoWindow im Array, direkt nach dem infoWindow = new ...
Erstellen Sie die Funktion closeAllInfoWindows
Rufen Sie in Ihrem Code closeAllInfoWindows () auf, bevor Sie das infoWindow öffnen.
Grüße,
quelle
Es wurde folgendermaßen gelöst:
quelle
Mit Google Maps können Sie nur ein Infofenster öffnen. Wenn Sie also ein neues Fenster öffnen, wird das andere automatisch geschlossen.
quelle