Come impedire la panoramica della mappa durante lo scorrimento della pagina


10

Quando una pagina HTML contiene una mappa e l'utente scorre la pagina utilizzando la rotellina del mouse, quando il mouse dell'utente passa sulla mappa la pagina smetterà di scorrere mentre la mappa stessa verrà spostata. Vedi Demo1 .

Vorrei emulare il comportamento dettagliato in Un semplice trucco di usabilità per Google Maps utilizzando ArcGIS Server JS API 3.x.

Cioè, la pagina dovrebbe scorrere a meno che l'utente non trascini esplicitamente all'interno della mappa, nel qual caso la mappa dovrebbe essere spostata .

Il comportamento è quasi lì in Demo2 , dove la pagina scorre anche se il mouse si trova sulla mappa.

map.on("load", function(){
  // Disable navigation by default, so scrolling the page doesn't scroll the map
  map.disableMapNavigation();

  // When the user tries to pan the map, allow this
  map.on('mouse-drag-start', function(){
    map.enableMapNavigation();
  });

  // Restore the no-scroll behaviour when the mouse leaves the map
  map.on('mouse-out', function(){
    map.disableMapNavigation();
  });
});

Tuttavia, il pan della mappa non è abilitato a meno che non si faccia prima clic una volta all'interno della mappa, si rilasci il pulsante del mouse e quindi il pan. È possibile ottenere l'effetto continuo mostrato con Google Maps nel post del blog?

Ho provato il mouse-drag, mouse-drag-starte mouse-downgli eventi ma il comportamento è lo stesso per tutti gli eventi.


1
Potresti provare enableMapNavigationa ricominciare subito dopo l' mouse-drag-startevento. Ho trovato dojotoolkit.org/reference-guide/1.10/dojo/Evented.html come classe dojo per emettere eventi. Quindi trascinerai (o fai clic) sulla mappa -> abilita la navigazione della mappa -> nella stessa funzione invoca l'evento di trascinamento (potrebbe essere in grado di invocare o richiedere parametri) -> trascina il trascinamento della tua attività. Potrebbe essere in grado di sollevare il mouse verso il basso e trascinarlo con sé. Potrebbe essere solo una combinazione di provare quegli eventi in diversi ordini, ecc.
Branco

Risposte:


2

Non si fornisce mai un motivo per utilizzare il metodo dis / enableMapNavigation anziché il metodo dis / enableScrollWheelZoom . Usa quest'ultimo.


Sfortunatamente questo non funziona perché (1) il comportamento predefinito della mappa è di eseguire la panoramica (non lo zoom) quando si utilizza la rotella di scorrimento e (2) map.disablePan();non si applica alla rotella di scorrimento, ma solo trascinare per eseguire la panoramica: jsfiddle.net/g7npfuvn/16
Stephen Lead,

Ah, il problema è che stavo testando su un Mac, dove smartNavigationha effetto: quando è vero, per i computer Apple con un trackpad o un mouse magico, scorrere le padelle invece di eseguire lo zoom . Se ho impostato questo su falso e test su un PC, funziona. Quindi sembra che questa sia una limitazione dell'API JS di ArcGIS Server su un Mac.
Stephen Lead,

Se imposti il ​​valore su false, dovresti vedere lo stesso comportamento indipendentemente dall'hardware os +. Prendi in considerazione l'ascolto di un evento mousemove e, al momento del rilevamento, la disattivazione di smartNav, simile a quello che è stato fatto qui .
Zack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.