não InfoWindow não quer fechar com Google Maps API V3
-
19-09-2019 - |
Pergunta
i não pode fechar a janela de informações do marcador eu estou arrastando, alguma idéia? Obrigado pela sua ajuda
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);
}
Solução
Sim, você define infowindow
em âmbito privado, mas o acesso fora desse âmbito. Adicione esta para o início do seu script:
var infowindow;
e remover 'var' de sua linha construtor:
infowindow = new google.maps.InfoWindow(
O código acabado (a partir de sua amostra) faria olhar como esta .
Um pouco mais fundo
Quando você define uma variável com var
, não está ligado a esse escopo. Se você defini-lo em uma função, apenas essa função e outras funções definidas em que pode acessar a variável. A única outra maneira de passá-lo ao redor é como um parâmetro em uma função.
Atualizar eu faria isso para facilitar múltiplas janelas de informações. Aviso eu revertido para a declaração var
original para mantê-lo como escopo dessa função. Eu, então, retornar a referência para o objeto para usá-lo posteriormente:
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
}