Jak zapobiec panoramowaniu mapy podczas przewijania strony

10

Gdy strona HTML zawiera mapę, a użytkownik przewija stronę w dół za pomocą kółka myszy, gdy mysz przesunie się nad mapą, strona przestanie się przewijać, a sama mapa przesunie się. Zobacz Demo1 .

Chciałbym emulować zachowanie wyszczególnione w Prosta sztuczka użyteczności dla Google Maps przy użyciu ArcGIS Server JS API 3.x.

Oznacza to, że strona powinna się przewijać, chyba że użytkownik wyraźnie przeciągnie wewnątrz mapy, w którym to przypadku mapa powinna się przesuwać .

Zachowanie jest prawie obecne w Demo2 , gdzie strona przewija się, nawet jeśli wskaźnik myszy znajduje się nad mapą.

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

Jednak panoramowanie mapy nie jest włączone, chyba że najpierw klikniesz raz na mapie, zwolnisz przycisk myszy, a następnie panoramujesz. Czy jest możliwe osiągnięcie płynnego efektu pokazanego w Mapach Google w poście na blogu?

Próbowałem mouse-drag, mouse-drag-starti mouse-downwydarzeń, ale zachowanie jest takie samo dla wszystkich zdarzeń.

Stephen Lead
źródło
1
Możesz spróbować enableMapNavigationod razu po ponownym wywołaniu mouse-drag-startwydarzenia. Znalazłem dojotoolkit.org/reference-guide/1.10/dojo/Evented.html jako klasę dojo do emitowania zdarzeń. Przeciągniesz (lub klikniesz) na mapę -> włączysz nawigację po mapie -> w tej samej funkcji wywołasz zdarzenie przeciągania (może być w stanie po prostu wywołać lub może wymagać parametrów) -> zajmij się przeciąganiem firmy. Może być w stanie podnieść mysz i przeciągnąć nią. Może to być kombinacja wypróbowania tych wydarzeń w różnych zamówieniach itp.
Branco

Odpowiedzi:

2

Nigdy nie podajesz powodu używania metody dis / enableMapNavigation zamiast metody dis / enableScrollWheelZoom . Użyj tego drugiego.

Zack
źródło
Niestety to nie działa, ponieważ (1) domyślnym zachowaniem mapy jest przesuwanie (nie powiększanie), gdy używane jest kółko przewijania, a (2) map.disablePan();nie dotyczy kółka przewijania, tylko przeciąganie do przesuwania: jsfiddle.net/g7npfuvn/16
Stephen Lead
Ach, problem polega na tym, że testowałem na komputerze Mac, gdzie smartNavigationdziała: Gdy jest to prawda, w przypadku komputerów Apple z gładzikiem lub magiczną myszą przesuń palcem zamiast powiększania . Jeśli ustawię to na false i przetestuję na komputerze, to zadziała. Wygląda na to, że jest to ograniczenie interfejsu API ArcGIS Server JS na komputerze Mac.
Stephen Lead
Jeśli ustawisz wartość na false, powinieneś zobaczyć to samo zachowanie niezależnie od sprzętu os +. Zastanów się nad wykryciem zdarzenia myszy i po wykryciu wyłączenia smartNav, podobnie jak tutaj .
Zack