Comment désactiver la navigation cartographique dans l'API JavaScript d'ArcGIS Server v4.x
Dans l'ancienne version 3.x de l'API JavaScript d'ArcGIS Server, il était possible de désactiver la navigation cartographique en utilisant disableMapNavigation()comme expliqué dans Désactivation de la carte dans l'API ArcGIS pour Javascript
Quel est l'équivalent de la désactivation de la navigation cartographique dans la version 4.x de l'API JavaScript d'ArcGIS Server? Le cas d'utilisation est d'empêcher temporairement la navigation sur la carte pendant qu'une requête externe est en cours d'exécution.
Le mapView a une propriété de navigation qui permet de désactiver certains types de navigation, comme dans l'exemple àhttps://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-disable-navigation, mais cela ne semble pas autoriser la désactivation de toute la navigation.
Par exemple, même lors de l'utilisation:
navigation: {
gamepad: {enabled: false},
browserTouchPanEnabled: false,
momentumEnabled: false,
mouseWheelZoomEnabled: false
}
l'utilisateur peut faire un panoramique de la carte avec la souris, zoomer en double-cliquant, faire pivoter la carte à l'aide du bouton droit de la souris, etc.
Réponses
Il semble désactiver complètement la navigation sur la carte (sous une condition, comme vous l'avez demandé), vous auriez besoin d'arrêter la propagation d'événements à partir de certains événements.
view.on(["click", "drag", "double-click", "mouse-wheel", "hold", ], function(event) {
if(thinking){
event.stopPropagation();
}
});
Cela arrêtera tous ces événements, si vous souhaitez désactiver un événement de clic ou de glisser à partir du seul bouton droit de la souris (au cas où vous souhaitez désactiver uniquement la rotation par exemple), les événements click, draget double-clickont également une propriété de bouton que vous pouvez utilisation:
Valeur Description
0 clic gauche (ou toucher)
1 clic central
2 clic droit
* Tiré de la documentation de l'événement de visualisation
ÉDITER
Après avoir posé des questions sur la désactivation du Shift+Left-click+Dragzoom, je suis retourné à la documentation et j'ai trouvé cet exemple
Apparemment, vous pouvez ajouter la définition d'une touche du clavier enfoncée à l'événement pour empêcher l'événement de bouillonner.
view.on("drag", ["Shift"], function(event) {
event.stopPropagation();
});
view.on("drag", ["Shift", "Control"], function(event) {
event.stopPropagation();
});
En plus de l'excellente réponse de Dror, pour empêcher l'utilisateur d'utiliser les boutons Zoom avant / arrière, vous pouvez créer un widget Zoom qui peut ensuite être supprimé si nécessaire.
Supprimez le zoom standard lors de l'instanciation de la vue à l'aide du mot-clé ui et n'incluez pas le contrôle de zoom:
const view = new MapView({
container: "viewDiv",
map: map,
ui: { components: ["attribution"] }
});
Ensuite, ajoutez / supprimez un contrôle de zoom si nécessaire:
let zoomControl = new Zoom({
view: view
});
// Enable zoom
view.ui.add(zoomControl, {
position: "top-left"
});
// Disable zoom
view.ui.remove(zoomControl);