InfoWindow не хочет закрываться с помощью Google Maps Api V3
-
19-09-2019 - |
Вопрос
я не могу закрыть информационное окно маркера, который перетаскиваю, есть идеи?Спасибо за вашу помощь
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", closeMapInfoWindow );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function closeMapInfoWindow() {infowindow.close(); }
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message,
});
infowindow.open(gMap2,gMarker);
}
Решение
Да, вы определяете infowindow
в частной области, но получить к нему доступ за пределами этой области.Добавьте это в начало вашего скрипта:
var infowindow;
И удалите 'var' из строки конструктора:
infowindow = new google.maps.InfoWindow(
Готовый код (из вашего образца) будет выглядеть так.
Еще немного предыстории
Когда вы определяете переменную с помощью var
, он привязан к этой области.Если вы определите ее в функции, только эта функция и другие функции, определенные в ней, смогут получить доступ к переменной.Единственный другой способ передать его — как параметр в функции.
Обновлять Я бы сделал это, чтобы облегчить создание нескольких информационных окон.Обратите внимание, я вернулся к оригиналу. var
декларацию, чтобы сохранить ее область действия для этой функции.Затем я возвращаю ссылку на объект, чтобы использовать его позже:
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
// Store reference to info window
var info = displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", function(){ info.close } );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message }
);
infowindow.open(gMap2,gMarker);
return infowindow; // Return the reference to the infowindow
}