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.