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})
Cérebro
fonte
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.

Chase Choi
fonte
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