我有以下代码在点击特定标记并打开窗口时打开infowindow。当点击另一个时,有没有人知道如何关闭以前的信息窗口?。
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map1, marker);
});
答案 0 :(得分:12)
请确保您只在全局范围内创建一个infoWindow
,如下所示:
infoWindow = new google.maps.InfoWindow; //static infoWindow for all your markers
google.maps.event.addDomListener(window, 'load', function() {
//create your markers here
google.maps.event.addListener(marker, 'click', function() {
infoWindow.open(map1, marker); //take care with case-sensitiveness
});
});
<强>更新强>:
答案 1 :(得分:6)
在JS文件中创建一个全局变量,将其命名为lastOpenedInfoWindow或任何你想要的,然后在打开新信息窗口之前关闭它,将“lastOpenedInfoWindow”分配给当前打开的窗口,依此类推
$hashCheck = $this->_db->get('users_session_table', array('user_id', '=', $this->data()->id)); }
答案 2 :(得分:1)
infowindow.close()
将关闭一个开放的信息窗口。这取决于你如何创建你的infowindows - 你只有一个infowindow变量来处理所有,或者你是否为每个标记创建多个infowindow对象?在这个阶段没有看到更多代码的情况下,很难更具体。
答案 3 :(得分:0)
为了在单击另一个时关闭前一个infowindow,您需要确保以下代码在函数initialize()循环中。
infoWindow = new google.maps.InfoWindow;
答案 4 :(得分:0)
我也有这个问题,这是我所做的:
function initMap() {
//---------------------map
var options = {
zoom: 12,
center: {
lat: 43.5963020324707,
lng: 1.4221688508987427
}
}
var map = new google.maps.Map(document.getElementById('map'), options);
//--------------- Adresses
let addresses = [
"23 Quai Lucien Lombard",
"18 Place Laganne",
"266 Avenue de Fronton",
"3 Impasse du Professeur Nougayrol",
"1 Allées Charles de Fitte",
"5 Avenue de Casselardit",
"84 Chemin des Argoulets"
];
// ---------------- globales
let markers = []
let infowindowArray = []
// ---------------- Adresses Géocoder
geocodeAdresses(addresses)
.then(res=>{
geocodeAdressesArray = res;
return geocodeAdressesArray
})
.then(geocodeAdressesArray=>{
// --------------create markers
for (let i = 0; i < geocodeAdressesArray.length; i++){
let marker = new google.maps.Marker({
'id': geocodeAdressesArray[i].id,
'adresse': geocodeAdressesArray[i].adresse,
'position':{
'lat':geocodeAdressesArray[i].lat,
'lng':geocodeAdressesArray[i].lng
}
});
markers.push(marker)// push globale
marker.setMap(map)
// ---------- create infowindows
let infowindow = new google.maps.InfoWindow({
'position' : marker.position,
'content': marker.adresse,
});
infowindowArray.push(infowindow) // push globale
}
// ---------------close infowindows on clic
for (let i = 0; i < markers.length; i++) {
let marker = markers[i];
marker.addListener( 'click', ()=>{
for (let j = 0; j < infowindowArray.length; j++) {
let infowindow = infowindowArray[j];
infowindow.close(map, marker)
}
let currentInfowindows = infowindowArray[i]
currentInfowindows.open(map)
})
}
})
}
对于我的geocode地址(地址),这是我从google geocode API创建的函数。
我希望它将对您有帮助
答案 5 :(得分:0)
如果您对“this”有任何问题(在我的情况下,我使用的是 Vue.js),您可以直接使用带有箭头函数的 marker
作为回调。请参阅documentation。
就我而言,我有(确保创建一个标记、内容并全局实例化 this.mapsInfoWindow,顺便说一句,不需要设置其内容):
...
marker.addListener("click", () => {
if (this.mapsInfoWindow) {
this.mapsInfoWindow.close();
}
this.mapsInfoWindow.setContent(content);
this.mapsInfoWindow.open(this.map, marker);
});
答案 6 :(得分:-1)
确保你有一个InfoWindow实例 - 新的google.maps.InfoWindow。因此,每次单击标记时,只会在初始化方法或全局声明的InfoWindow中声明一个实例。
var infoWindow = new google.maps.InfoWindow
确保此infoWindow仅实例化一次。否则,每次单击标记时都会打开多个窗口。
marker.addListener('click', function () {
infoWindow.setContent(infowincontent);
infoWindow.open(clntLocMap, marker);
});