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ń.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.