Nonaktifkan klik dua kali zoom di OpenLayers 3


8

Saya telah mencarinya di seluruh web dan akhirnya saya menemukan di artamstrong.com cara menonaktifkan fitur tunggal seperti "mouseWheelZoom".

Berikut ini cara menonaktifkan klik dua kali pada 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
    })
});

Ini sangat sederhana, katakan saja ol3 untuk mengatur "doubleClickZoom" pada false:

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

5
Hai Otak, Selamat Datang di GIS @ Se, ini adalah informasi yang sangat berguna, tetapi situs ini membutuhkan posting pertanyaan dan jawaban spesifik. Jangan ragu untuk mengedit pertanyaan Anda untuk menjadikannya Pertanyaan, lalu jawab dengan solusi Anda. Orang yang memposting pertanyaan dapat menjawab pertanyaan mereka sendiri.
Mark Cupitt

Jawaban:


8

Jika Anda ingin menonaktifkan doubleClickZoom setelah inisialisasi peta, berikut adalah caranya:

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

Anda juga dapat menghapus atau menambahkan interaksi seperti PinchZoom, KeyboardZoom, dll. dengan cara yang sama.


Di Array, Anda bisa menggunakan findalih-alih forEach: const dblClickInteractio = map.getInteraction().getArray().find((interaction ) => { return interaction instanceof ol.interaction.DoubleClickZoom })
YairTawil

@ YairTawil Senang tahu. tapi, apakah ada keuntungan untuk menggunakan findbukan forEach?
Chase Choi

1
Tentu, find akan memutus loop ... forEach akan selalu berjalan n kali
YairTawil

Jika ada beberapa interaksi, filterdapat digunakan juga.
Chase Choi

1
Harus berupa map.getInteractions (). GetArray () dengan tanda 's' di akhir getInteractions (), bukan getInteraction. Padahal sebenarnya jawaban yang jauh lebih bersih ada di pertanyaan ....
mwarren

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.