Как отключить навигацию по карте в ArcGIS Server JavaScript API v4.x

Nov 16 2020

В старой версии 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
}

пользователь может перемещать карту с помощью мыши, масштабировать двойным щелчком, вращать карту с помощью правой кнопки мыши и т. д.

Ответы

4 DrorBogin Nov 16 2020 at 12:55

Кажется, что полностью отключена навигация по карте (при условии, как вы просили), вам нужно будет остановить распространение событий от определенных событий.

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();
});
1 StephenLead Nov 16 2020 at 16:14

В дополнение к отличному ответу Дрора, чтобы предотвратить использование пользователем кнопок 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);