Jak wyłączyć nawigację po mapie w ArcGIS Server JavaScript API v4.x
W starszej wersji 3.x API JavaScriptu ArcGIS Server, można było wyłączyć mapy nawigacji przy użyciu disableMapNavigation()jak wyjaśniono w Dezaktywacja mapie w ArcGIS API dla JavaScript
Jaki jest odpowiednik wyłączenia nawigacji po mapie w wersji 4.x interfejsu ArcGIS Server JavaScript API? Przypadek użycia polega na tymczasowym zapobieganiu nawigacji na mapie, gdy jest uruchomione zapytanie zewnętrzne.
MapView ma właściwość nawigacji, która umożliwia wyłączenie niektórych typów nawigacji, jak w przykładzie whttps://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-disable-navigation, ale wydaje się, że nie pozwala to na wyłączenie całej nawigacji.
Np. Nawet podczas używania:
navigation: {
gamepad: {enabled: false},
browserTouchPanEnabled: false,
momentumEnabled: false,
mouseWheelZoomEnabled: false
}
użytkownik może przesuwać mapę za pomocą myszy, powiększać poprzez dwukrotne kliknięcie, obracać mapę prawym przyciskiem myszy itp.
Odpowiedzi
Wygląda na to, że całkowicie wyłącza nawigację po mapie (pod warunkiem, jak prosiłeś), że będziesz musiał zatrzymać propagację wydarzeń z niektórych wydarzeń.
view.on(["click", "drag", "double-click", "mouse-wheel", "hold", ], function(event) {
if(thinking){
event.stopPropagation();
}
});
Spowoduje to zatrzymanie wszystkich tych zdarzeń, jeśli chcesz wyłączyć zdarzenie kliknięcia lub przeciągnięcia za pomocą prawego przycisku myszy (na przykład na wypadek, gdybyś chciał wyłączyć tylko obrót) click, draga double-clickzdarzenia i mają również właściwość przycisku, którą możesz posługiwać się:
Wartość Opis
0 kliknięcie lewym przyciskiem (lub dotknięcie)
1 kliknięcie środkowym przyciskiem
2 kliknięcie prawym przyciskiem myszy
* Zaczerpnięte z dokumentacji wydarzenia przeglądania
EDYTOWAĆ
Po zapytaniu o wyłączenie Shift+Left-click+Dragpowiększania, wróciłem do dokumentów i znalazłem ten przykład
Najwyraźniej możesz dodać definicję wciśniętego klawisza klawiatury do zdarzenia, aby zatrzymać bulgotanie zdarzenia.
view.on("drag", ["Shift"], function(event) {
event.stopPropagation();
});
view.on("drag", ["Shift", "Control"], function(event) {
event.stopPropagation();
});
Oprócz doskonałej odpowiedzi Drora, aby uniemożliwić użytkownikowi korzystanie z przycisków Powiększ / Zmniejsz, możesz utworzyć widżet Zoom, który można następnie usunąć w razie potrzeby.
Usuń standardowe powiększenie podczas tworzenia wystąpienia widoku za pomocą słowa kluczowego ui i nie dołączaj kontrolki powiększenia:
const view = new MapView({
container: "viewDiv",
map: map,
ui: { components: ["attribution"] }
});
Następnie dodaj / usuń kontrolkę powiększenia stosownie do potrzeb:
let zoomControl = new Zoom({
view: view
});
// Enable zoom
view.ui.add(zoomControl, {
position: "top-left"
});
// Disable zoom
view.ui.remove(zoomControl);