2013-09-04 8 views
19

Also mache ich diese Anwendung mit leafet.js. Diese Anwendung erfordert, dass ich manuell Gitter auf dem Bildschirm, , die ich in einer draw_grid() Funktion, die eine Menge von Polygonen auf dem Bildschirm zeichnet, aufgepasst hat.Leaflet.js: Erkennen, wenn die Karte zoomt

Ich habe diese Funktion, die ich anrufe, um die Änderung der Prospektkarte auszulösen. - die Zoom-Ganzzahl und size ist ein Diktat wie {x:1,y:1}, das die Größe der auf der Karte gezeichneten Kacheln steuert. (Sie brauchen, da die Einheiten zu ändern, die Fliesen unter lat sind gezogen werden, lange Punkte auf der Karte.

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

}

der Grund, ich habe die setTimeout verwenden, da die Broschüre ignores jede Zeichnung die Karte Befehle auf (was ich als eine Schicht mache), bis die Karte animieren beendet.

wie dies asynchron stattdessen zu tun?

Antwort

35

Sie das map.zoomend Ereignis verwenden können, in der API-beschrieben

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

Sobald die Karte, um die Zoom-Animation abgeschlossen ist, wird es dann rufen Sie die drawGrid Funktion.

+3

Dieses Ereignis noch für mich scheint während eines „scroll-zoom“ viele Male zu schießen. Liegt es daran, dass ich ein Touchpad benutze? –

+0

danke für den api-Link – s2t2

+1

gibt es eine Möglichkeit, nach mehreren Ereignissen wie "paning" und "zooming" zu suchen? Ich habe auch überprüft, dass das Ereignis "load" nicht ausgelöst wird. – ram

13

In der neueren Version von Leaflet ist "zoomed" kein Ereignis mehr. Inzwischen gibt es „zoomstart“ und „zoomend“ Ereignisse:

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