Інформаційне вікно API Карт Google v3 закрити подію / зворотний дзвінок?


76

Мені подобається відстежувати будь-які та всі інформаційні вікна, які відкриті в моєму інтерфейсі Google Maps (я зберігаю їх імена в масиві), але я не можу зрозуміти, як їх видалити зі свого масиву, коли вони закриті через "x "у верхньому правому куті кожного з них.

Чи є якийсь зворотний дзвінок, який я можу слухати? А може, я можу зробити щось подібне addListener("close", infowindow1, etc?

Відповіді:


13

Єдине послідовне рішення, яке я знайшов тут, - зберегти вказівник на 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- це нормально. Однак існують інші причини, через які він може бути закритий.


ця відповідь повинна мати більше голосів. Це дає більше деталей і пояснює це чітко і коротко
bermick

172

є подія для дзвінка infowindows, 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
});

3
Зауважте, що це не спрацьовує, коли натискається інший маркер поруч і цей маркер закривається автоматично ... наприклад, коли відбувається прокрутка, щоб переконатися, що інформаційне вікно знаходиться у видимих ​​межах карти.
Гільдія Бена,

1

Спрощуючи та розширюючи найбільш прихильне рішення , ви можете створити маркер під час обробки події клацання маркера, дозволяючи вам упакувати його видалення через closeclickподію значка x одночасно.

Ось приклад, який включає уникнення створення дублікатів інформаційного вікна шляхом позначення логічного 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']щоб повністю видалити кожне.

Я вважаю, що така поведінка дозволяє вам уникнути використання інформаційного вікна в більшості випадків без необхідності переробляти все це відповідно до спеціального спливаючого прикладу Google .


0

Спробуйте це:

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

Я перезаписую цю функцію натискання, оскільки кнопка натискання не працює в сафарі після того, як я змінив її css / положення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.