Desativar o zoom duplo no OpenLayers 3


8

Eu procurei em toda a web e finalmente encontrei no artamstrong.com como desativar um único recurso como "mouseWheelZoom".

Veja como o zoom duplo do OpenLayers 3 pode ser desativado:

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

É realmente simples assim, basta dizer ao ol3 para definir "doubleClickZoom" em false:

interactions : ol.interaction.defaults({doubleClickZoom :false})

5
Olá, Bem-vindo ao GIS @ Se, essas informações são incrivelmente úteis, mas este site requer a publicação de perguntas e respostas específicas. Sinta-se à vontade para editar sua pergunta e torná-la uma pergunta e, em seguida, responda com sua solução. As pessoas que postam perguntas podem responder suas próprias perguntas.
— Mark Cupitt

Respostas:


8

Se você deseja desativar o doubleClickZoom após a inicialização do mapa, aqui está o caminho:

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

Você também pode remover ou adicionar interação, como PinchZoom, KeyboardZoom, etc. da mesma maneira.


Na matriz, você pode usar em findvez de forEach: const dblClickInteractio = map.getInteraction().getArray().find((interaction ) => { return interaction instanceof ol.interaction.DoubleClickZoom })
— YairTawil 17/17

@YairTawil É bom saber. Mas, há uma vantagem para usar findem vez forEach?
— Perseguição Choi

1
Claro, achado vai quebrar o ciclo ... forEach sempre será executado n vezes
— YairTawil

Se houver várias interações, também filterpode ser usado.
— Perseguição Choi

1
Deve ser map.getInteractions (). GetArray () com um 's' no final de getInteractions (), não getInteraction. Embora, na verdade, uma resposta mais limpo muito está na pergunta ....
— mwarren

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.