2013-09-04 15 views
19

Tak więc tworzę tę aplikację za pomocą pliku leafet.js. Ta aplikacja wymaga, aby ręcznie rysować siatki na ekranie, , które podjąłem w funkcji draw_grid(), która rysuje grupę wielokątów na ekranie.Leaflet.js: wykrywanie kiedy mapa kończy powiększanie

Mam tę funkcję, którą wzywam, aby wywołać zmianę mapy ulotek. zoom - liczba całkowita zbliżenia i size to dyktatura, taka jak {x:1,y:1}, która kontroluje rozmiar płytek narysowanych na mapie. (Muszą się zmieniać wraz z jednostkami płytki są rysowane pod to lat, długie punktów na mapie.

function changeZoom(zoom,size){ 
    map.setZoom(zoom); 
    setSize(size); 
    setTimeout(drawGrid,500)s; 

}

powód, dla którego trzeba użyć setTimeout jest, ponieważ ulotka ignores dowolny rysunek polecenia na mapie (co robię jako warstwa), aż mapa zakończeniu animacji.

jak to zrobić asynchronicznie zamiast?

Odpowiedz

35

można użyć zdarzenia map.zoomend, opisaną w API here

map.on('zoomend', function() { 
    drawGrid(); 
}); 

Gdy mapa kończy animację zoomu, to następnie wywołać funkcję drawGrid.

+3

Zdarzenie to wciąż wydaje się ogień dla mnie wiele razy podczas „przewijać-Zoom”. Czy to dlatego, że używam touchpada? –

+0

dziękuję za api link – s2t2

+1

czy istnieje sposób na sprawdzenie wielu zdarzeń, takich jak "przesuwanie", a także "powiększanie"? również sprawdziłem, że zdarzenie "load" nie jest uruchamiane. – ram

13

W nowszej wersji ulotki "zoomed" nie jest już wydarzeniem. Istnieje teraz „zoomstart” i „zoomend” wydarzenia:

map.on("zoomstart", function (e) { console.log("ZOOMSTART", e); }); 
map.on("zoomend", function (e) { console.log("ZOOMEND", e); });