2014-11-04 13 views
12

Ich brauche eine Zoom-Ereignis in Open Layers 3.Open Layers 3 Karte vergrößern Ereignishandler

Das folgende ist mein Code zu handhaben:

map_object = new ol.Map({ 
target: 'map', 
controls: controls_list, 
interactions: interactions_list, 
overlays: [overlay], 
layers: [OSM_raster, WFS_layer], 
    view: view 
}); 


map_object.on("Zoom", function() { 
    console.log('Zooming...'); 
}); 

Dieser Code läuft ohne Fehler und zeigt eine Karte, Es wird jedoch keine Ausgabe an die Konsole ausgegeben, was darauf hindeutet, dass diese Funktion nicht ausgelöst wird.

habe ich auch versucht:

map_object.on("drag", function() { 
    console.log('Dragging...'); 
}); 

Und dies auch tut nichts.

Irgendwelche Hilfe, wie man Kartenkontrollereignisse in OL3 behandelt, würde sehr geschätzt werden (besonders das Zoomen!). Hinweis Ich habe sowohl Zoom als auch Zoom für das Typfeld der on-Methode versucht.

Antwort

8

versuchen Sie mit moveend Ereignis. (siehe http://openlayers.org/en/master/apidoc/ol.Map.html, & Vergessen Sie nicht, in der oberen Leiste "Nur stabil" zu deaktivieren).

+0

Leider ist dies das Problem des Umgangs mit einem Zoom-Ereignisse nicht lösen. Ich muss wissen, wann und nur wenn Zoom auftritt (nicht schwenken oder drehen) und auf welche Weise der Zoom geht. Ich habe jedoch eine Workaround-Lösung gefunden, die ich in Kürze veröffentlichen werde, die keine "nicht stabilen" Ereignisse beinhaltet und perfekt funktioniert. Trotzdem danke. –

+13

würde 'map.getView(). On ('change: resolution')' Ihren Anforderungen entsprechen? – tonio

+0

Ja, eigentlich ist das sehr nützlich. Vielen Dank. Das hat mein Problem gelöst, nachdem ich einen Nachmittag damit verbracht habe, eine Arbeit mit Hammer.js zu erstellen! Danke noch einmal. –

9

Nur um hinzuzufügen, können Sie Variationen der Ereignisse mit 'propertychange' überprüfen, von dem, was ich sehe, gibt es keine explizite .on ('zoom', ...), sondern Sie können Zugriff auf 'Auflösung' und andere Eigenschaften wie in früheren Kommentaren erwähnt:

map.getView().on('propertychange', function(e) { 
    switch (e.key) { 
     case 'resolution': 
     console.log(e.oldValue); 
     break; 
    } 
}); 
+0

'propertychange' Ereignis ist wirklich nützlich, um mehrere Szenarien unter einer Haube zu erfassen .. danke .. –

+0

das ist ein besserer Code wiederverwendbar und vielseitig einsetzbar ... brilliant in der Tat. Vielen Dank. –

+1

Sie können tun: map.getView().on ('change: resolution', function() {console.log ("mach was")}); –

0

Sie die Moveend Ereignis verwalten können ...

Wir werden eine globale Variable benötigen Karte Ansicht Zoomstufe alocate. Ich habe benannt als currentZoomLevel.

Es ist ein moveend -Ereignis verfügbar. Lassen Sie uns es verwenden, und fügen Sie eine Zoom-Ebene Check-Funktion ..

Falls es eine neue Zoomstufe gibt, lösen wir ein Zoomend-Ereignis auf DOM-Dokument.

Schließlich müssen wir zoomend Listener zum Dokumentelement hinzufügen.

var = currentZoomLevel; 

map.on('moveend', checknewzoom); 

function checknewzoom(evt) 
{ 
    var newZoomLevel = map.getView().getZoom(); 
    if (newZoomLevel != currentZoomLevel) 
    { 
     currentZoomLevel = newZoomLevel; 
     $(document).trigger("zoomend", zoomend_event); 
    } 
} 

$(document).on('zoomend', function() { 
    console.log("Zoom"); 
    //Your code here 
}); 

Source

+1

'var = currentZoomLevel; ??? ':) –

Verwandte Themen