Я хочу, чтобы это информационное окно закрывалось, когда я нажимаю где-нибудь на карте или на какой-то другой маркер. То есть одновременно открыто только одно информационное окно, а все остальные информационные окна закрыты.
Но как мне это сделать?
Мой код:
var map = new google.maps.Map(document.getElementById('map'), options);
addMarker({
coords: { lat: 62.791711, lng: 22.808479 },
content: 'test 1'
});
addMarker({
coords: { lat: 65.799962, lng: 24.497773 },
content: 'test 2'
});
addMarker({
coords: { lat: 62.331629, lng: 22.890667 },
content: 'test 3'
});
function addMarker(props) {
var marker = new google.maps.Marker({
position: props.coords,
map: map
});
if (props.content) {
var infoWindow = new google.maps.InfoWindow({
content: props.content
});
marker.addListener('click', function() {
infoWindow.open(map, marker);
});
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать глобальную переменную для infoWindow и проверить, назначена ли она уже открытой. Если это правда, закройте и откройте еще один:
var map = new google.maps.Map(document.getElementById('map'), options);
var actInfoWindow;
addMarker({
coords:{lat:62.791711, lng:22.808479},
content:'test 1'
});
addMarker({coords:{lat:65.799962, lng:24.497773},
content:'test 2'
}),
addMarker({coords:{lat:62.331629, lng:22.890667},
content:'test 3'
});
function addMarker(props){
var marker = new google.maps.Marker({
position:props.coords,
map:map,
});
if (props.content){
actInfoWindow = new google.maps.InfoWindow({
content:props.content,
});
marker.addListener('click', function(){
var tempMap = actInfoWindow.getMap();
if (tempMap !== null && typeof tempMap !== "undefined") {
actInfoWindow.close();
}
actInfoWindow = infoWindow.open(map, marker);
});
}
Чтобы одновременно было открыто только одно информационное окно, создайте глобальную переменную, которая будет содержать один экземпляр InfoWindow.
var infoWindow;
Затем в своей функции инициализации (initMap) создайте информационное окно:
infoWindow = new google.maps.InfoWindow();
Измените функцию addMarker на следующее:
function addMarker(props) {
var marker = new google.maps.Marker({
position: props.coords,
map: map
});
if (props.content) {
marker.addListener('click', function() {
infoWindow.setContent(props.content);
infoWindow.open(map, marker);
});
}
}
И если вы хотите закрыть информационное окно, когда пользователь щелкает по карте, вы можете добавить этот прослушиватель событий на карту:
map.addListener('click', function() {
if (infoWindow) infoWindow.close();
});
Вот JSBin с рабочим примером.
Большое спасибо! Это решило мою проблему!
Пожалуйста! Рад помочь :-)
Взгляните на этот вопрос.