InfoWindow no quiere cerrar con Google Maps API V3
-
19-09-2019 - |
Pregunta
No puedo cerrar la ventana de información del marcador estoy arrastrando, alguna idea? Gracias por su ayuda
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);
}
Solución
Sí, se define infowindow
en un ámbito privado, pero el acceso fuera de ese ámbito. Esto, unido al inicio de la secuencia de comandos:
var infowindow;
Y retire 'var' de su línea constructor:
infowindow = new google.maps.InfoWindow(
El código final (de la muestra) sería tener este aspecto .
Un poco más de fondo
Cuando se define una variable con var
, que está ligado a ese ámbito. Si se define en una función, solo que la función y otras funciones definidas en ella pueden acceder a la variable. La única otra manera de pasar alrededor es como un parámetro en una función.
Actualizar Me gustaría hacer esto para facilitar múltiples ventanas de información. Noto que he vuelto a la declaración var
originales para mantenerla como alcance esa función. luego regrese la referencia al objeto de utilizar más tarde:
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
}