Ulotka kółko myszy powiększać tylko po kliknięciu mapy


19

Pracuję z biblioteką JavaScript Ulotki i dołączyłem (działającą) mapę do mojego dokumentu HTML. Znajduje się na środku strony, a kiedy przewijam kółkiem myszy w dół i docieram do mapy, automatycznie przybliża mapę.

Chcę przewijać stronę bez zatrzymywania się na mapie. Czy istnieje sposób, aby włączyć zoom koła dopiero po pierwszym kliknięciu mapy?

Odpowiedzi:


27

To proste: utwórz L.Map z scrollWheelZoom: falseopcją, a następnie dodaj detektor:

map.once('focus', function() { map.scrollWheelZoom.enable(); });

Jeśli chcesz przełączyć powiększanie:

map.on('click', function() {
  if (map.scrollWheelZoom.enabled()) {
    map.scrollWheelZoom.disable();
    }
    else {
    map.scrollWheelZoom.enable();
    }
  });

Dzięki :) Zacząłem komentować, ale zrobiłem się za duży, więc odpowiedz poniżej .
danwild

13

Więcej komentarza / ulepszenia na temat przełączania akceptowanej odpowiedzi , co jest świetne (dzięki). Ale.

Podczas interakcji z mapą w wielu przypadkach użytkownik musi również kliknąć mapę, aby wykonać swoje zadanie, więc:

map.on('click', function() {
  if (map.scrollWheelZoom.enabled()) {
    map.scrollWheelZoom.disable();
    }
    else {
    map.scrollWheelZoom.enable();
    }
  });

Może powodować nieoczekiwane zachowanie, gdy użytkownik zacznie faktycznie korzystać z mapy.

Sugerowałbym coś, co może wydawać się nieco bardziej intuicyjne dla użytkownika - kliknij mapę, aby wyłączyć przewijanie myszy .

Na przykład ustaw swój scrollWheelZoom: falsejak powyżej, a następnie:

map.on('focus', function() { map.scrollWheelZoom.enable(); });
map.on('blur', function() { map.scrollWheelZoom.disable(); });

1
Używanie focus/ blurzdecydowanie sprawia, że ​​funkcjonalność mapy jest znacznie bardziej intuicyjna.
doublesharp

Zgoda. Podejście do ostrości / rozmycia jest świetne. Dzięki!
sstringer

Świetnie, ale potrzebuje środków, aby wyłączyć przewijanie, jeśli mapa jest pełnoekranowa, a użytkownik przewija się w krótkich odstępach czasu (wprowadzając kilka zmian kierunkowych w ciągu jednej sekundy). To mylone przewijanie w górę i w dół występuje, gdy są one zablokowane i nie mogą opuścić mapy pełnej przeglądarki, aby uzyskać dostęp do zawartości powyżej lub poniżej.
Loren

6

Ulotka Uśpienie ułatwi ci pracę i jest w pełni konfigurowalna

Zasadniczo wyłącza zdarzenia przewijania, gdy nie są potrzebne, i „budzi” mapę, gdy są one potrzebne.

Będę pisać kod, ale domyślnie wydaje się uzyskać to prawo, więc prawdopodobnie nie będzie musiał niczego poza <script src="path/to/leaflet-sleep.js"></script>i będziesz mieć taką mapę tego .


0

Możesz to zrobić tylko tymi 3 liniami:

map.scrollWheelZoom.disable();
map.on('focus', () => { map.scrollWheelZoom.enable(); });
map.on('blur', () => { map.scrollWheelZoom.disable(); });

lub:

map.scrollWheelZoom.disable();
this.map.on('click', () => { this.map.scrollWheelZoom.enable();});
this.map.on('mouseout', () => { this.map.scrollWheelZoom.disable();});
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.