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

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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.