W mojej aplikacji mogę uruchamiać zdarzenia zmiany powiększenia programowo, za pośrednictwem setZoom()
, fitBounds()
lub setOptions()
.
MAN = {};
MAN.globalMap = google.maps.Map(document.getElementById('map'));
Następnie trasa wszystkie połączenia programowe ustawienie zoomu poprzez wrappery że odwraca flagę false
zanim pójdą na ustawienie zoomu.
MAN.savedZoom = MAN.globalMap.getZoom();
MAN.saveZoomFlag = true;
// we want it to always be true, unless zoom was
// changed programatically.
MAN.setZoom = function setZoom(zoomLevel) {
console.log("won't save that I'm setting zoomLevel to " + zoomLevel);
this.saveZoomFlag = false;
MAN.globalMap.setZoom(zoomLevel);
};
MAN.fitBounds = function fitBounds(bounds) {
console.log("setting bounds, won't save zoomlevel.");
this.saveZoomFlag = false;
MAN.globalMap.fitBounds(bounds);
};
MAN.setOptions = function setOptions(options) {
console.log("setting options, won't save zoomlevel.");
this.saveZoomFlag = false;
MAN.globalMap.setOptions(options);
};
Następnie deklaruję słuchaczy. Na początku byłem deklarując tylko pierwszy, i był zaskoczony, że to nie działa:
google.maps.event.addListener(
MAN.globalMap,
'zoom_changed',
function zoom_changed_listener() {
console.log(
"zoom changed to " +
MAN.globalMap.getZoom() + "; " +
(MAN.saveZoomFlag ? "saving." : "not saving.")
);
if (MAN.saveZoomFlag) {
console.trace("saving");
MAN.savedZoom = MAN.globalMap.getZoom();
}
MAN.saveZoomFlag = true;
}
);
można również znaleźć wydarzenie idle
pomocny, jednak, jeśli jesteś po prostu stara się uniknąć początkowego zestawu. Więcej informacji o wydarzeniach map można znaleźć tutaj: https://developers.google.com/maps/documentation/javascript/events
To co mam aktualnie robi, ale kiedy istnieje jeden marker i dostaję granic dla jednego markera i zrobić map.fitBounds (granic) dwa razy wywołuje zdarzenie zoom_changed.Więc sposób, w jaki rozwiązuję to teraz, utrzymuje globalną tablicę i wciskam w nią obiekt za każdym razem, gdy wywołuję funkcję fitBounds, ale kiedy granice południowy zachód i północny wschód są takie same (co oznacza, że masz wszystkie znaczniki w jednym miejscu lub tylko jeden znacznik na map), a następnie wciskam inny obiekt do tablicy, a gdy tablica jest pusta w wyzwalaczu, ponowne wyszukiwanie na serwerze –