Подтвердить что ты не робот

Проверьте, открыт ли инфополя Google Maps v3

Пожалуйста, мне нужна помощь.

Я хочу проверить, открыта ли моя инфоустановка.

Например:

if (infowindow.isOpened)
{
   doSomething()
}

или

if (infowindow.close)
{
   doAnotherthing();
}

У меня нет идеи, как это сделать

4b9b3361

Ответ 1

Это недокументированная функция и поэтому может быть изменена без уведомления, однако метод infoWindow.close() устанавливает карту на объект в null (вот почему infoWindow.open(map, [anchor]) требует, чтобы вы проходили в Map), поэтому вы можете проверить это свойство, чтобы узнать, отображается ли оно в настоящее время:

function isInfoWindowOpen(infoWindow){
    var map = infoWindow.getMap();
    return (map !== null && typeof map !== "undefined");
}

if (isInfoWindowOpen(infoWindow)){
    // do something if it is open
} else {
    // do something if it is closed
}

Update: Другой потенциально полезный способ написать это - добавить метод isOpen() к InfoWindow prototype.

google.maps.InfoWindow.prototype.isOpen = function(){
    var map = this.getMap();
    return (map !== null && typeof map !== "undefined");
}

Ответ 2

Пока Google не дает нам лучшего способа сделать это, вы можете добавить свойство к объектам infoWindow. Что-то вроде:

google.maps.InfoWindow.prototype.opened = false;
infoWindow = new google.maps.InfoWindow({content: '<h1> Olá mundo </h1>'});

if(infoWindow.opened){
   // do something
   infoWindow.opened = false;
}
else{
   // do something else
   infoWindow.opened = true;
}

Ответ 3

Я изменил прототип google.maps.InfoWindow и изменил open/close, чтобы установить/очистить свойство:

//
// modify the prototype for google.maps.Infowindow so that it is capable of tracking
// the opened state of the window.  we track the state via boolean which is set when
// open() or close() are called.  in addition to these, the closeclick event is
// monitored so that the value of _openedState can be set when the close button is
// clicked (see code at bottom of this file).
//
google.maps.InfoWindow.prototype._open = google.maps.InfoWindow.prototype.open;
google.maps.InfoWindow.prototype._close = google.maps.InfoWindow.prototype.close;
google.maps.InfoWindow.prototype._openedState = false;

google.maps.InfoWindow.prototype.open =
    function (map, anchor) {
        this._openedState = true;
        this._open(map, anchor);
    };

google.maps.InfoWindow.prototype.close =
    function () {
        this._openedState = false;
        this._close();
    };

google.maps.InfoWindow.prototype.getOpenedState =
    function () {
        return this._openedState;
    };

google.maps.InfoWindow.prototype.setOpenedState =
    function (val) {
        this._openedState = val;
    };

Вам также необходимо отслеживать событие closeclick, потому что нажатие на кнопку закрытия не вызывает функцию close().

//
// monitor the closelick event and set opened state false when the close
// button is clicked.
//
(function (w) {
    google.maps.event.addListener(w, "closeclick", function (e) {
        w.setOpenedState(false);
    });
})(infowindow);

Вызов InfoWindow.getOpenedState() возвращает логическое значение, которое отражает состояние (открытое/закрытое) инфо-окна.

Я решил сделать это таким образом, вместо использования метода InfoWindow.getMap() или MVCObject.get('map') из-за известных ошибок использования недокументированного поведения. Однако google использует MVCObject.set('map', null) для принудительного удаления InfoWindow из DOM, поэтому маловероятно, что это изменится...

Ответ 4

infowindow.getMap() возвращает значение null, если infowindow закрыто. Таким образом, вы можете просто использовать

if (infowindow.getMap());