Deshabilite el zoom de doble clic en OpenLayers 3

8

Lo busqué en toda la web y finalmente encontré en artamstrong.com cómo deshabilitar una función única como "mouseWheelZoom".

Así es como se puede desactivar el zoom de doble clic en OpenLayers 3:

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 realmente así de simple, solo dile a ol3 que establezca "doubleClickZoom" en falso:

interactions : ol.interaction.defaults({doubleClickZoom :false})
Cerebro
fuente
55
Hola Brain, Bienvenido a GIS @ Se, esta es información increíblemente útil, pero este sitio requiere la publicación de preguntas y respuestas específicas. Siéntase libre de editar su pregunta para convertirla en una Pregunta, y luego conteste con su solución. Las personas que publican preguntas pueden responder sus propias preguntas.
Mark Cupitt

Respuestas:

8

Si desea deshabilitar doubleClickZoom después de la inicialización del mapa, esta es la forma:

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);

También puede eliminar o agregar interacciones como PinchZoom, KeyboardZoom, etc. de la misma manera

Chase Choi
fuente
En Array, puede usar en findlugar de forEach: const dblClickInteractio = map.getInteraction().getArray().find((interaction ) => { return interaction instanceof ol.interaction.DoubleClickZoom })
YairTawil
@YairTawil Es bueno saberlo. pero, ¿hay alguna ventaja para usar finden su lugar forEach?
Chase Choi
1
Claro, find romperá el ciclo ... porque cada uno siempre se ejecutará n veces
YairTawil
Si hay múltiples interacciones, también filterse puede usar.
Chase Choi
1
Debe ser map.getInteractions (). GetArray () con una 's' al final de getInteractions (), no getInteraction. Aunque en realidad una respuesta más limpia tanto está en la pregunta ....
mwarren