Пожалуйста, мне нужна помощь.
Я хочу проверить, открыта ли моя инфоустановка.
Например:
if (infowindow.isOpened)
{
doSomething()
}
или
if (infowindow.close)
{
doAnotherthing();
}
У меня нет идеи, как это сделать
Пожалуйста, мне нужна помощь.
Я хочу проверить, открыта ли моя инфоустановка.
Например:
if (infowindow.isOpened)
{
doSomething()
}
или
if (infowindow.close)
{
doAnotherthing();
}
У меня нет идеи, как это сделать
Это недокументированная функция и поэтому может быть изменена без уведомления, однако метод 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");
}
Пока 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;
}
Я изменил прототип 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, поэтому маловероятно, что это изменится...
infowindow.getMap() возвращает значение null, если infowindow закрыто. Таким образом, вы можете просто использовать
if (infowindow.getMap());