43

拜托,我需要帮助。

我想检查我的信息窗口是否打开。

例如:

if (infowindow.isOpened)
{
   doSomething()
}

或者

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

我不知道该怎么做

4

5 回答 5

65

这是一个未记录的功能,因此可能会在没有通知的情况下进行更改,但是该infoWindow.close()方法将对象上的地图设置为null(这就是为什么infoWindow.open(map, [anchor])需要您传入 a 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
}

更新: 另一种可能有用的编写isOpen()方法是向InfoWindow prototype.

google.maps.InfoWindow.prototype.isOpen = function(){
    var map = this.getMap();
    return (map !== null && typeof map !== "undefined");
}
于 2012-09-13T16:02:31.793 回答
26

在谷歌没有给我们任何更好的方法之前,您可以向 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;
}
于 2012-09-27T20:50:18.447 回答
12

我修改了 google.maps.InfoWindow 的原型并更改了打开/关闭以设置/清除属性:

//
// 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()orMVCObject.get('map')方法是因为众所周知的使用无证行为的陷阱。然而,谷歌使用MVCObject.set('map', null)强制从 DOM 中删除 InfoWindow,所以这不太可能改变......

于 2013-06-18T20:31:03.880 回答
3

infowindow.getMap()infowindow如果关闭则返回 null 。

所以你可以简单地使用:

if (infowindow.getMap());
于 2015-07-03T14:06:36.717 回答
2

您可以简单地为 infoWindow设置key和:valueinfoWindow.set('closed', true);

例子:

const infoWindow = new google.maps.InfoWindow({
    content: 'foo',
    position: {
        lat: some_number,
        lng: some_number
    }
});

infoWindow.set('closed', true);

// Clicking on polyline for this example
// Can be marker too
polyline.addListener(
    'click',
    () => {
        if (infoWindow.get('closed')) {
            infoWindow.open(map);
            infoWindow.set('closed', false);
        } else {
            infoWindow.close();
            infoWindow.set('closed', true);
        }
    }
);
于 2019-11-26T13:31:02.320 回答