Как отключить навигацию по карте в ArcGIS Server JavaScript API v4.x
В старой версии 3.х на API ArcGIS Server JavaScript, можно было отключить карты навигации с использованием , disableMapNavigation()как описано в карте деактивацию в ArcGIS API для Javascript
Что эквивалентно отключению навигации по карте в версии 4.x ArcGIS Server JavaScript API? Сценарий использования - временное предотвращение навигации по карте во время выполнения внешнего запроса.
MapView имеет свойство навигации, которое позволяет отключать определенные типы навигации, как в примере наhttps://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-disable-navigation, но, похоже, это не позволяет отключить всю навигацию.
Например, даже при использовании:
navigation: {
gamepad: {enabled: false},
browserTouchPanEnabled: false,
momentumEnabled: false,
mouseWheelZoomEnabled: false
}
пользователь может перемещать карту с помощью мыши, масштабировать двойным щелчком, вращать карту с помощью правой кнопки мыши и т. д.
Ответы
Кажется, что полностью отключена навигация по карте (при условии, как вы просили), вам нужно будет остановить распространение событий от определенных событий.
view.on(["click", "drag", "double-click", "mouse-wheel", "hold", ], function(event) {
if(thinking){
event.stopPropagation();
}
});
Это остановит все эти события, если вы хотите отключить событие щелчка или перетаскивания только правой кнопкой мыши (например, если вы хотите отключить только вращение), тогда события click, dragи double-clickтакже имеют свойство кнопки, которое вы можете использование:
Значение Описание
0 щелчок левой кнопкой (или касание)
1 щелчок средней кнопкой
2 щелчок правой кнопкой
* Взято из документации по событию просмотра
РЕДАКТИРОВАТЬ
Спросив об отключении Shift+Left-click+Dragмасштабирования, я вернулся к документации и нашел этот пример
По-видимому, вы можете добавить определение нажатой клавиши клавиатуры к событию, чтобы остановить всплытие события.
view.on("drag", ["Shift"], function(event) {
event.stopPropagation();
});
view.on("drag", ["Shift", "Control"], function(event) {
event.stopPropagation();
});
В дополнение к отличному ответу Дрора, чтобы предотвратить использование пользователем кнопок Zoom In / Out, вы можете создать виджет Zoom, который затем можно удалить при необходимости.
Удалите стандартное масштабирование при создании экземпляра представления с помощью ключевого слова ui и не включайте элемент управления масштабированием:
const view = new MapView({
container: "viewDiv",
map: map,
ui: { components: ["attribution"] }
});
Затем при необходимости добавьте / удалите элемент управления масштабированием:
let zoomControl = new Zoom({
view: view
});
// Enable zoom
view.ui.add(zoomControl, {
position: "top-left"
});
// Disable zoom
view.ui.remove(zoomControl);