So verhindern Sie, dass die Karte beim Scrollen der Seite geschwenkt wird

10

Wenn eine HTML-Seite eine Karte enthält und der Benutzer mit dem Mausrad die Seite nach unten scrollt, hört die Seite auf zu scrollen, während die Karte selbst schwenkt, wenn die Maus des Benutzers über die Karte fährt. Siehe Demo1 .

Ich möchte das unter Ein einfacher Usability-Trick für Google Maps mit der ArcGIS Server JS API 3.x beschriebene Verhalten emulieren .

Das heißt, die Seite sollte einen Bildlauf durchführen, es sei denn, der Benutzer zieht explizit innerhalb der Karte. In diesem Fall sollte die Karte schwenken .

Das Verhalten ist in Demo2 fast vorhanden , wo die Seite auch dann gescrollt wird , wenn sich Ihre Maus über der Karte befindet.

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

Das Schwenken der Karte ist jedoch nur aktiviert, wenn Sie zuerst einmal in die Karte klicken, die Maustaste loslassen und dann schwenken. Ist es möglich, den nahtlosen Effekt zu erzielen, der mit Google Maps im Blogbeitrag angezeigt wird?

Ich habe die und Ereignisse ausprobiert mouse-drag, aber das Verhalten ist für alle Ereignisse gleich.mouse-drag-startmouse-down

Stephen Lead
quelle
1
Sie können versuchen, wann Sie enableMapNavigationsofort nach dem erneuten Aufrufen des mouse-drag-startEreignisses. Ich fand dojotoolkit.org/reference-guide/1.10/dojo/Evented.html als Dojo-Klasse, um Ereignisse auszugeben . Sie würden also auf die Karte ziehen (oder darauf klicken) -> die Kartennavigation aktivieren -> in derselben Funktion das Drag-Ereignis aufrufen (möglicherweise nur Parameter aufrufen oder Parameter benötigen) -> Ihr Unternehmen ziehen. Möglicherweise kann es mit der Maus nach unten greifen und mitziehen. Könnte nur eine Kombination aus dem Ausprobieren dieser Ereignisse in verschiedenen Reihenfolgen usw. sein
Branco,

Antworten:

2

Sie geben niemals einen Grund für die Verwendung der dis / enableMapNavigation- Methode anstelle der dis / enableScrollWheelZoom- Methode an. Verwenden Sie letzteres.

Zack
quelle
Leider funktioniert dies nicht, da (1) das Standardverhalten der Karte das Schwenken (nicht Zoomen) ist, wenn das Scrollrad verwendet wird, und (2) map.disablePan();nicht für das Scrollrad gilt, sondern nur zum Schwenken: jsfiddle.net/g7npfuvn/16
Stephen Lead
Ah, das Problem ist, dass ich auf einem Mac getestet habe, wo dies smartNavigationwirksam wird: Wenn dies zutrifft, streichen Sie bei Apple-Computern mit Trackpad oder magischer Maus die Schwenks, anstatt zu zoomen . Wenn ich dies auf false setze und auf einem PC teste, funktioniert es. Es sieht also so aus, als wäre dies eine Einschränkung der ArcGIS Server JS-API auf einem Mac.
Stephen Lead
Wenn Sie den Wert auf false setzen, sollte unabhängig von der OS + -Hardware dasselbe Verhalten auftreten. Warten Sie auf ein Mousemove-Ereignis und schalten Sie bei Erkennung SmartNav aus, ähnlich wie hier .
Zack