检查信息窗口打开谷歌地图V3(Check if infowindow is opened Googl

2019-06-28 08:55发布

拜托,我需要帮助。

我想确认我的信息窗口被打开。

例如:

if (infowindow.isOpened)
{
   doSomething()
}

要么

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

我没有任何想法,如何做到这一点

Answer 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
}

更新:写这个另一种可能有用的方法是将一个添加isOpen()方法将InfoWindow prototype

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


Answer 2:

直到谷歌并没有给我们这样做的什么更好的方法,你可以将属性添加到信息窗口对象。 就像是:

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


Answer 3:

我修改了原型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()MVCObject.get('map')的方法,因为使用无证行为的众所周知的缺陷。 然而谷歌使用MVCObject.set('map', null)强制删除从DOM信息窗口的,所以它是不可能的,这将改变...



Answer 4:

如果信息窗口被关闭infowindow.getMap()返回null。 所以,你可以简单地使用

如果(infowindow.getMap());



文章来源: Check if infowindow is opened Google Maps v3