检查infowindow是否已打开Goog​​le Maps v3

时间:2012-09-13 15:44:10

标签: google-maps-api-3 infowindow

拜托,我需要帮助。

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

例如:

if (infowindow.isOpened)
{
   doSomething()
}

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

我不知道如何做到这一点

5 个答案:

答案 0 :(得分:54)

这是一个未记录的功能,因此如有更改,恕不另行通知,但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
}

<强>更新 另一种可能有用的方法是向isOpen() InfoWindow添加prototype方法。

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

答案 1 :(得分:23)

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

答案 2 :(得分:12)

我修改了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的状态(打开/关闭)。

我选择这样做而不是使用InfoWindow.getMap()MVCObject.get('map')方法,因为众所周知的使用无证行为的陷阱。但是谷歌使用MVCObject.set('map', null)强制从DOM中删除InfoWindow,因此这不太可能会改变......

答案 3 :(得分:0)

如果infowindow关闭,

infowindow.getMap()将返回null。 所以你可以简单地使用

if(infowindow.getMap());

答案 4 :(得分:0)

您只需为infoWindow设置keyvalueinfoWindow.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);
        }
    }
);