Google Maps API v3 Infofenster Ereignis/Rückruf schließen?

Lesezeit: 3 Minuten

Benutzer-Avatar
Colin

Ich verfolge gerne alle Infofenster, die auf meiner Google Maps-Oberfläche geöffnet sind (ich speichere ihre Namen in einem Array), aber ich kann nicht herausfinden, wie ich sie aus meinem Array entfernen kann, wenn sie über das “x “ jeweils in der oberen rechten Ecke.

Gibt es eine Art Rückruf, auf den ich hören kann? Oder vielleicht kann ich so etwas tun
addListener("close", infowindow1, etc ?

Benutzer-Avatar
Jörg

Es gibt ein Ereignis für den Aufruf von Infowindows closeclick das kann dir helfen

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
});

  • Beachten Sie, dass dies nicht ausgelöst wird, wenn auf eine andere Markierung in der Nähe geklickt wird und diese Markierung automatisch geschlossen wird … z. B. wenn ein Bildlauf stattfindet, um sicherzustellen, dass sich das Infofenster innerhalb der sichtbaren Grenzen der Karte befindet.

    – Ben Gilde

    20. November 2016 um 14:30 Uhr

Die einzige konsistente Lösung, die ich hier gefunden habe, besteht darin, einen Zeiger auf die beizubehalten infoWindow und überprüfe es .getMap() -Methode, wenn Sie überprüfen müssen, ob sie geschlossen wurde.

Der Grund dafür ist, dass das Klicken auf ein anderes Element dazu führen kann, dass das infoWindow aus anderen Gründen geschlossen wird … ohne die closeclick Ereignisfeuer.

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);

…wenn es dir buchstäblich nur darum geht, ob die infoWindow wurde mit der Schaltfläche “X” geschlossen, dann Überwachung closeclick ist gut. Es gibt jedoch andere Gründe, warum es möglicherweise geschlossen ist oder wurde.

Versuche dies:

var closeBtn = $('.gm-style-iw').next();
closeBtn.click(function(){
    //other things you want to do when close btn is click
    that.infowindow.close();
});

Ich überschreibe diese Klickfunktion, da die Klickschaltfläche in Safari nicht funktioniert, nachdem ich die CSS/Position davon geändert habe.

infoWindow.addListener('closeclick', ()=>{
  // Handle focus manually.
});

Vereinfachen und erweitern Sie die Lösung mit den meisten positiven Stimmen, indem Sie die Markierung während der Verarbeitung des Markierungsklickereignisses erstellen und die Entfernung aufgrund des x-Symbols paketieren können closeclick Veranstaltung zur gleichen Zeit.

Hier ist ein Beispiel, das die Vermeidung der doppelten Erstellung von Infofenstern durch Anheften eines booleschen Werts beinhaltet hasInfoWindow Status auf Markierungen.

  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);
      });
    }
  });

Wenn Sie dann alle geöffneten Infofenster aufgrund eines Klickereignisses auf einer Karte entfernen möchten, können Sie den Inhalt von iterieren mapSet['infoWindowsObj'] jeweils vollständig zu entfernen.

Ich glaube, dieses Verhalten lässt Sie in den meisten Fällen mit der Verwendung von infowindow davonkommen, ohne das Ganze gemäß Google neu implementieren zu müssen benutzerdefiniertes Popup-Beispiel.

Benutzer-Avatar
Qaisar Mahmud

Dies ist sehr einfach. Suchen Sie die Klasse der Schaltfläche zum Schließen des Infofensters, dh “.gm-ui-hover-effect”.

Auslöser zum Schließen des Infofensters

$(‘.gm-ui-hover-effekt’).trigger(‘click’);

1113960cookie-checkGoogle Maps API v3 Infofenster Ereignis/Rückruf schließen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy