Deaktivieren der Kartennavigation in der ArcGIS Server JavaScript API v4.x.
In der älteren Version 3.x der ArcGIS Server-JavaScript-API war es möglich, die Kartennavigation zu deaktivieren , disableMapNavigation()wie unter Deaktivieren der Karte in der ArcGIS-API für Javascript erläutert
Was entspricht dem Deaktivieren der Kartennavigation in Version 4.x der ArcGIS Server-JavaScript-API? Der Anwendungsfall besteht darin, die Kartennavigation vorübergehend zu verhindern, während eine externe Abfrage ausgeführt wird.
Die mapView verfügt über eine Navigationseigenschaft , mit der bestimmte Navigationstypen deaktiviert werden können, wie im Beispiel unterhttps://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-disable-navigationDies scheint jedoch nicht zuzulassen, dass die gesamte Navigation deaktiviert wird.
ZB auch bei Verwendung von:
navigation: {
gamepad: {enabled: false},
browserTouchPanEnabled: false,
momentumEnabled: false,
mouseWheelZoomEnabled: false
}
Der Benutzer kann die Karte mit der Maus schwenken, durch Doppelklicken zoomen, die Karte mit der rechten Maustaste drehen usw.
Antworten
Es scheint die Kartennavigation vollständig zu deaktivieren (unter einer Bedingung, wie Sie gefragt haben), die Sie benötigen würden, um die Ereignisausbreitung von bestimmten Ereignissen zu stoppen.
view.on(["click", "drag", "double-click", "mouse-wheel", "hold", ], function(event) {
if(thinking){
event.stopPropagation();
}
});
Dadurch werden alle diese Ereignisse stoppen, wenn Sie einen Klick oder Drag - Ereignis von nur der rechten Maustaste (falls Sie möchten , deaktivieren Sie einfach Drehung zum Beispiel) deaktivieren möchten, dann ist das click, dragund double-clickEreignisse haben auch eine Schaltfläche Eigenschaft , die Sie können verwenden:
Wert Beschreibung
0 Linksklick (oder Berührung)
1 Mittelklick
2 Rechtsklick
* Aus der Ansicht Ereignisdokumentation entnommen
BEARBEITEN
Nachdem ich nach dem Deaktivieren des Shift+Left-click+DragZooms gefragt hatte , ging ich zurück zu den Dokumenten und fand dieses Beispiel
Anscheinend können Sie dem Ereignis die Definition einer gedrückten Tastaturtaste hinzufügen, um das Sprudeln des Ereignisses zu verhindern.
view.on("drag", ["Shift"], function(event) {
event.stopPropagation();
});
view.on("drag", ["Shift", "Control"], function(event) {
event.stopPropagation();
});
Zusätzlich zu Drors hervorragender Antwort können Sie ein Zoom-Widget erstellen, das bei Bedarf entfernt werden kann, um zu verhindern, dass der Benutzer die Schaltflächen zum Vergrößern / Verkleinern verwendet.
Entfernen Sie den Standard-Zoom, wenn Sie die Ansicht mit dem Schlüsselwort ui instanziieren , und schließen Sie das Zoom-Steuerelement nicht ein:
const view = new MapView({
container: "viewDiv",
map: map,
ui: { components: ["attribution"] }
});
Fügen Sie dann nach Bedarf eine Zoomsteuerung hinzu oder entfernen Sie sie:
let zoomControl = new Zoom({
view: view
});
// Enable zoom
view.ui.add(zoomControl, {
position: "top-left"
});
// Disable zoom
view.ui.remove(zoomControl);