Deaktivieren Sie das Doppelklick-Zoomen in OpenLayers 3

8

Ich habe im gesamten Web danach gesucht und schließlich auf artamstrong.com gefunden, wie man eine einzelne Funktion wie "mouseWheelZoom" deaktiviert.

So kann das Doppelklick-Zoomen in OpenLayers 3 deaktiviert werden:

var map = new ol.Map({
    controls : ol.control.defaults()
                .extend([ new ol.control.FullScreen() ]),
    interactions : ol.interaction.defaults({doubleClickZoom :false}),
    target : 'map',
    layers : [ new ol.layer.Tile({
            title : 'OpenStreetMaps',
            preload : Infinity,
            source : new ol.source.OSM(),
            visible : true
    }) ],
    view : new ol.View({
            center : ol.proj.transform([ 9.41, 48.82 ], 'EPSG:4326','EPSG:3857'),
            zoom : 12
    })
});

Es ist wirklich so einfach, sag ol3 einfach, dass "doubleClickZoom" auf false gesetzt werden soll:

interactions : ol.interaction.defaults({doubleClickZoom :false})
Gehirn
quelle
5
Hallo Gehirn, Willkommen bei GIS @ Se, dies sind unglaublich nützliche Informationen, aber auf dieser Website müssen bestimmte Fragen und Antworten veröffentlicht werden. Sie können Ihre Frage jederzeit bearbeiten, um sie zu einer Frage zu machen, und sie dann mit Ihrer Lösung beantworten. Personen, die Fragen stellen, können ihre eigenen Fragen beantworten.
Mark Cupitt

Antworten:

8

Wenn Sie doubleClickZoom nach der Karteninitialisierung deaktivieren möchten, gehen Sie wie folgt vor:

var dblClickInteraction;
// find DoubleClickZoom interaction
map.getInteractions().getArray().forEach(function(interaction) {
  if (interaction instanceof ol.interaction.DoubleClickZoom) {
    dblClickInteraction = interaction;
  }
});
// remove from map
map.removeInteraction(dblClickInteraction);

Sie können auch Interaktionen wie PinchZoom, KeyboardZoom usw. entfernen oder hinzufügen. mit dem gleichen Weg.

Chase Choi
quelle
In Array können Sie findanstelle von forEach: const dblClickInteractio = map.getInteraction().getArray().find((interaction ) => { return interaction instanceof ol.interaction.DoubleClickZoom })
YairTawil
@ YairTawil Gut zu wissen. Aber gibt es findstattdessen einen Vorteil forEach?
Chase Choi
1
Sicher, find wird die Schleife brechen ... forEach wird immer n-mal laufen
YairTawil
Wenn es mehrere Interaktionen gibt, filterkann auch verwendet werden.
Chase Choi
1
Sollte map.getInteractions (). GetArray () mit einem 's' am Ende von getInteractions () sein, nicht getInteraction. Obwohl tatsächlich eine viel sauberere Antwort in der Frage ist ....
mwarren