Cara menonaktifkan navigasi peta di ArcGIS Server JavaScript API v4.x
Di ArcGIS Server JavaScript API versi 3.x yang lebih lama, navigasi peta dapat dinonaktifkan menggunakan disableMapNavigation()seperti yang dijelaskan di Menonaktifkan peta di ArcGIS API untuk Javascript
Apa yang setara untuk menonaktifkan navigasi peta di versi 4.x dari ArcGIS Server JavaScript API? Kasus penggunaannya adalah untuk mencegah navigasi peta sementara, saat kueri eksternal sedang berjalan.
MapView memiliki properti navigasi yang memungkinkan beberapa jenis navigasi dinonaktifkan, seperti pada contoh dihttps://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-disable-navigation, tetapi ini tampaknya tidak memungkinkan semua navigasi dinonaktifkan.
Misalnya, bahkan saat menggunakan:
navigation: {
gamepad: {enabled: false},
browserTouchPanEnabled: false,
momentumEnabled: false,
mouseWheelZoomEnabled: false
}
pengguna dapat menggeser peta dengan mouse, memperbesar dengan mengklik dua kali, memutar peta menggunakan tombol kanan mouse, dll.
Jawaban
Tampaknya untuk menonaktifkan navigasi peta sepenuhnya (dalam kondisi, seperti yang Anda minta), Anda harus menghentikan penyebaran peristiwa dari peristiwa tertentu.
view.on(["click", "drag", "double-click", "mouse-wheel", "hold", ], function(event) {
if(thinking){
event.stopPropagation();
}
});
Ini akan menghentikan semua peristiwa tersebut, jika Anda ingin menonaktifkan klik atau seret peristiwa hanya dari tombol kanan mouse (jika Anda ingin menonaktifkan rotasi saja misalnya), maka peristiwa click, dragdan double-clickjuga memiliki properti tombol yang Anda dapat menggunakan:
Nilai Deskripsi
0 klik kiri (atau sentuh)
1 klik tengah
2 klik kanan
* Diambil dari dokumentasi view event
EDIT
Setelah bertanya tentang Menonaktifkan Shift+Left-click+Dragzooming juga, saya kembali ke dokumen dan menemukan contoh ini
Rupanya Anda dapat menambahkan definisi tombol keyboard yang ditekan ke acara untuk menghentikan acara menggelembung.
view.on("drag", ["Shift"], function(event) {
event.stopPropagation();
});
view.on("drag", ["Shift", "Control"], function(event) {
event.stopPropagation();
});
Selain jawaban yang sangat bagus dari Dror, untuk mencegah pengguna menggunakan tombol Zoom In / Out, Anda dapat membuat widget Zoom yang kemudian dapat dihapus jika perlu.
Hapus Zoom standar saat membuat instance tampilan menggunakan kata kunci ui , dan jangan menyertakan kontrol Zoom:
const view = new MapView({
container: "viewDiv",
map: map,
ui: { components: ["attribution"] }
});
Kemudian tambahkan / hapus kontrol Zoom sesuai kebutuhan:
let zoomControl = new Zoom({
view: view
});
// Enable zoom
view.ui.add(zoomControl, {
position: "top-left"
});
// Disable zoom
view.ui.remove(zoomControl);