拜托,我需要帮助。
我想检查我的信息窗口是否打开。
例如:
if (infowindow.isOpened)
{
doSomething()
}
或者
if (infowindow.close)
{
doAnotherthing();
}
我不知道该怎么做
拜托,我需要帮助。
我想检查我的信息窗口是否打开。
例如:
if (infowindow.isOpened)
{
doSomething()
}
或者
if (infowindow.close)
{
doAnotherthing();
}
我不知道该怎么做
这是一个未记录的功能,因此可能会在没有通知的情况下进行更改,但是该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");
}
在谷歌没有给我们任何更好的方法之前,您可以向 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 的原型并更改了打开/关闭以设置/清除属性:
//
// 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,所以这不太可能改变......
infowindow.getMap()
infowindow
如果关闭则返回 null 。
所以你可以简单地使用:
if (infowindow.getMap());
您可以简单地为 infoWindow设置key
和:value
infoWindow.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);
}
}
);