web-dev-qa-db-ja.com

情報ウィンドウが開いているかどうかを確認してくださいGoogle Maps v3

助けてください。

情報ウィンドウが開いているかどうかを確認したい。

例えば:

if (infowindow.isOpened)
{
   doSomething()
}

または

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

どうすればいいのかわからない

31
Fred Vicentin

これは文書化されていない機能であり、予告なしに変更される場合がありますが、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
}
_

更新:これを記述する別の潜在的に有用な方法は、InfoWindowprototypeisOpen()メソッドを追加することです。

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

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;
}
23
pedro

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

閉じるボタンをクリックしてもclose()が呼び出されないため、closeclickイベントも監視する必要があります。

_//
// 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)を使用してDOMからInfoWindowを強制的に削除するため、これが変更されることはほとんどありません...

12
John Sully

infowindow.getMap()は、infowindowが閉じている場合はnullを返します。簡単に使用できます

if(infowindow.getMap());