This sample demonstrates how to disable mouse-wheel zooming and single finger panning on touch devices with a Map component. This can be done by setting navigation.actionMap.mouseWheel to "none" and browserTouchPanEnabled to false on the component’s view navigation.
Disable the mouse-wheel navigation and single finger panning on touch devices
viewElement.map = new ArcGISMap({ basemap: "hybrid",});
// Disable mouse-wheel and single-touch map navigation.viewElement.navigation = { actionMap: { mouseWheel: "none", }, browserTouchPanEnabled: false,};
await viewElement.viewOnReady();You can display warning messages to your users as they try to use the disabled navigation gestures by listening to mouse-wheel and pointer events on the Map component.
// Listen to events that have been disallowed for navigation.viewElement.addEventListener("arcgisViewMouseWheel", () => { warnUser("To zoom in please double-click the map or use zoom in/out buttons.");});
// Trap attempted single touch panning.const pointers = new Map(); // JavaScript MapviewElement.addEventListener("arcgisViewPointerDown", (event) => { if (event.detail.pointerType !== "touch") { return; } pointers.set(event.detail.pointerId, { x: event.detail.x, y: event.detail.y });});
[ "arcgisViewPointerUp", "arcgisViewPointerLeave",].forEach((eventName) => { viewElement.addEventListener(eventName, (event) => { if (event.detail.pointerType !== "touch") { return; } pointers.delete(event.detail.pointerId); });});
viewElement.addEventListener("arcgisViewPointerMove", (event) => { if (event.detail.pointerType !== "touch" || pointers.size !== 1) { return; } const start = pointers.get(event.detail.pointerId); if (!start) { return; } // Calculate how far the touch moved from its starting point. const distance = Math.hypot(event.detail.x - start.x, event.detail.y - start.y); if (distance < 20) { return; } warnUser("Please use two fingers to pan the map.");});
// Display a warning.let timeout;function warnUser(warning) { const warningDiv = document.getElementById("warning"); warningDiv.replaceChildren(); const message = document.createElement("div"); message.className = "message"; message.textContent = warning; warningDiv.append(message); warningDiv.style.opacity = 1; if (timeout) { window.clearTimeout(timeout); } timeout = window.setTimeout(() => { warningDiv.style.opacity = 0; warningDiv.textContent = ""; }, 4000);}