javascript - ejemplos - google.maps.marker example
Cerrando cualquier ventana de informaciĆ³n abierta en google maps api v3 (6)
Como dice el título, en un evento determinado (para mí, esto sucede al abrir una nueva google.maps.InfoWindow
, quiero poder cerrar cualquier otra ventana de información actualmente abierta. En este momento, puedo abrir muchas a la vez). .pero quiero solo 1 abierto a la vez.
Estoy creando dinámicamente las ventanas de información (es decir, no sé de antemano cuántas se generarán), así que en el evento de clic de la ventana de información actual (que es donde quiero que se cierren todas las demás abiertas) no lo hago t tiene una referencia a cualquiera de las otras ventanas de información abiertas en las que llamar a close()
. Me pregunto cómo puedo lograr esto. No soy un programador experimentado de JavaScript, así que no sé si necesito usar el reflejo o algo similar aquí.
¿Sería la mejor manera de guardar todas las referencias en algún tipo de colección, y luego recorrer la lista para cerrarlas todas?
Gracias.
infowindow es una variable local y la ventana no está disponible en el momento de close ()
var latlng = new google.maps.LatLng(-34.397, 150.644); var infowindow
= null;
...
google.maps.event.addListener(marker, ''click'', function() {
if (infowindow) {
infowindow.close();
}
infowindow = new google.maps.InfoWindow();
... });
...
Debería ser suficiente tener una ventana de información global y luego cambiar la posición y el contenido de esa ventana de información.
var infowindow = new google.maps.InfoWindow();
// Call this function to open an infowindow i.e. on click.
function respondToClick(latlng) {
infowindow.setOptions({
position: latlng,
content" "Hello, world"
});
}
Como se usa la misma ventana de información cada vez, se le garantiza que solo tendrá una abierta, y usa menos recursos / memoria que crear y luego destruir varias ventanas de información.
He decidido crear una matriz de todos los Infobox creados dinámicamente. Cuando haga clic en cualquier primer recorrido del conjunto y luego cierre todos, abra solo uno en el que haya hecho clic.
var allInfos = [];
function closeInfos() {
for (i = 0; i < allInfos.length; i++) {
allInfos[i].close();
}
}
Una vez creado el cuadro de información, dinámicamente lo está agregando a la matriz cada uno de la siguiente manera:
allInfos.push(infowindow);
La mejor manera de hacer esto, creo ... es tener un objeto con las infowindows que has abierto
Tengo dos objetos, las infos tienen todos los infowindows creados y los marcadores contienen todos los marcadores con sus infowindows, así que solo ejecuto estas funciones que hacen un bucle en el objeto infowindow y cierro todas las infowindows
function CloseInfowindows() {
for (var mkey in infos) {
var mobj = markers[mkey];
mobj.infowindow.close();
}
}
Me encontré con el mismo problema y lo solucioné al crear una ventana de información global.
var infowindow = new google.maps.InfoWindow();
Luego tengo una función para hacer lo siguiente en el oyente click:
function getInfoWindowEvent(marker) {
infowindow.close()
infowindow.setContent("This is where my HTML content goes.");
infowindow.open(map, marker);
}
Esto logra lo que creo que estás buscando b / c ahora solo hay una ventana de información en el mapa y simplemente la cierro, vuelvo a cargar el contenido y lo vuelvo a abrir para el marcador dado.
Solo necesita una línea: $(".gm-style-iw").next().click();
Hay un div con esta clase, ''gm-style-iw'', dentro de la ventana de información. Después, está el div del botón de cerrar. Por lo tanto, este código hará clic en cada botón de cerrar infowindow existente en el mapa