Comment empêcher le panoramique de la carte lors du défilement de la page


10

Lorsqu'une page HTML contient une carte et que l'utilisateur fait défiler la page à l'aide de la molette de sa souris, lorsque la souris de l'utilisateur passe sur la carte, la page cesse de défiler tandis que la carte elle-même se déplace. Voir Demo1 .

Je voudrais émuler le comportement détaillé dans Une simple astuce d'utilisation pour Google Maps en utilisant ArcGIS Server JS API 3.x.

Autrement dit, la page doit défiler à moins que l'utilisateur ne traîne explicitement dans la carte, auquel cas la carte doit se déplacer .

Le comportement est presque là dans Demo2 , où la page défile même si votre souris survole la carte.

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();
  });
});

Toutefois, le panoramique de la carte n'est activé que si vous cliquez d'abord une fois dans la carte, relâchez le bouton de la souris, puis effectuez un panoramique. Est-il possible d'obtenir l'effet transparent montré avec Google Maps dans le billet de blog?

J'ai essayé le mouse-drag, mouse-drag-startet les mouse-downévénements , mais le comportement est le même pour tous les événements.


1
Vous pouvez essayer quand vous enableMapNavigationrevoquez immédiatement l' mouse-drag-startévénement. J'ai trouvé dojotoolkit.org/reference-guide/1.10/dojo/Evented.html en tant que classe dojo pour émettre des événements. Vous devez donc faire glisser (ou cliquer) sur la carte -> activer la navigation dans la carte -> dans la même fonction, invoquer l'événement de glisser (vous pouvez peut-être simplement invoquer ou nécessiter des paramètres) -> vaquer à vos occupations en faisant glisser. Il peut être capable de décrocher la souris et de la faire glisser avec. Peut-être juste un combo d'essayer ces événements dans des ordres différents, etc.
Branco

Réponses:


2

Vous ne donnez jamais de raison d'utiliser la méthode dis / enableMapNavigation plutôt que la méthode dis / enableScrollWheelZoom . Utilisez ce dernier.


Malheureusement, cela ne fonctionne pas car (1) le comportement par défaut de la carte consiste à effectuer un panoramique (et non un zoom) lorsque la molette de défilement est utilisée, et (2) map.disablePan();ne s'applique pas à la molette de défilement, mais uniquement à glisser-déplacer: jsfiddle.net/g7npfuvn/16
Stephen Lead

Ah, le problème est que je testais sur un Mac, où smartNavigationprend effet: lorsque cela est vrai, pour les ordinateurs Apple avec un trackpad ou une souris magique, faites glisser les panoramiques au lieu de zoomer . Si je mets ceci sur faux et que je teste sur un PC, cela fonctionne. Il semble donc qu'il s'agit d'une limitation de l'API ArcGIS Server JS sur un Mac.
Stephen Lead

Si vous définissez la valeur sur false, vous devriez voir le même comportement quel que soit le matériel os +. Envisagez d'écouter un événement de déplacement de souris et, lorsque vous détectez, de désactiver smartNav, comme ce qui a été fait ici .
Zack
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.