Désactiver le zoom double-clic dans OpenLayers 3

8

Je l'ai cherché sur tout le Web et j'ai finalement trouvé sur artamstrong.com comment désactiver une seule fonctionnalité comme "mouseWheelZoom".

Voici comment désactiver le zoom double clic dans 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
    })
});

C'est vraiment aussi simple que cela, dites simplement à ol3 de définir "doubleClickZoom" sur false:

interactions : ol.interaction.defaults({doubleClickZoom :false})
Cerveau
la source
5
Salut cerveau, Bienvenue sur GIS @ Se, ce sont des informations incroyablement utiles, mais ce site nécessite la publication de questions et réponses spécifiques. N'hésitez pas à modifier votre question pour en faire une question, puis répondez-y avec votre solution. Les personnes qui posent des questions peuvent répondre à leurs propres questions.
Mark Cupitt

Réponses:

8

Si vous souhaitez désactiver doubleClickZoom après l'initialisation de la carte, voici le moyen:

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

Vous pouvez également supprimer ou ajouter des interactions telles que PinchZoom, KeyboardZoom, etc. de la même manière.

Chase Choi
la source
Dans Array, vous pouvez utiliser à la findplace de forEach: const dblClickInteractio = map.getInteraction().getArray().find((interaction ) => { return interaction instanceof ol.interaction.DoubleClickZoom })
YairTawil
@YairTawil Bon à savoir. mais y a-t-il un avantage à utiliser à la findplace forEach?
Chase Choi
1
Bien sûr, find rompra la boucle ... forEach sera toujours exécuté n fois
YairTawil
S'il y a plusieurs interactions, filterpeut également être utilisé.
Chase Choi
1
Doit être map.getInteractions (). GetArray () avec un «s» à la fin de getInteractions (), pas getInteraction. Bien qu'en réalité une réponse beaucoup plus
nette