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); 
}
Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top