Pracuję nad witryną WordPress, w której autorzy zwykle osadzają Mapy Google, używając iFrames w większości postów.
Czy istnieje sposób na wyłączenie powiększenia za pomocą kółka myszy na wszystkich przy użyciu Javascript?
google-maps
scrollwheel
holiveira
źródło
źródło
scrollwheel
nafalse
.Odpowiedzi:
Miałem ten sam problem: podczas przewijania strony wskaźnik przesuwa się nad mapą, zaczyna powiększać / pomniejszać mapę zamiast kontynuować przewijanie strony. :(
Więc rozwiązałem to wstawianie
div
z.overlay
dokładnie przed każdymiframe
wstawieniem gmap , patrz:W moim CSS utworzyłem klasę:
Div pokryje mapę, zapobiegając dostaniu się do niej zdarzeń wskaźnika. Ale jeśli klikniesz div, staje się przezroczysty dla zdarzeń wskaźnika, ponownie aktywując mapę!
Mam nadzieję, że ci pomogę :)
źródło
z-index
, aby poprawnie się nakładało.Wypróbowałem pierwszą odpowiedź w tej dyskusji i nie działało to dla mnie bez względu na to, co zrobiłem, więc wpadłem na własne rozwiązanie:
Zawiń iframe klasą (.maps w tym przykładzie) i najlepiej osadzaj kod: http://embedresponsively.com/ - Zmień CSS iframe na,
pointer-events: none
a następnie używając funkcji kliknięcia jQuery na element nadrzędny, możesz zmienić css iframes dopointer-events:auto
HTML
CSS
jQuery
Jestem pewien, że jest to jedyny sposób na JavaScript, jeśli ktoś chce dodać do tego coś nowego.
Sposób JavaScript na reaktywację zdarzeń wskaźnika jest dość prosty. Wystarczy podać identyfikator w ramce iFrame (tj. „Iframe”), a następnie zastosować zdarzenie onclick do elementu div Coainainer:
źródło
pointer-events: none
zapobiegnie wszelkim interakcjom z mapą (przeciąganie, nawigacja, kliknięcia itp.).$(this).find('iframe').css("pointer-events", "auto");
Rozszerzyłem rozwiązanie @nathanielperales.
Poniżej opisu zachowania:
Poniżej kodu javascript:
A oto przykład jsFiddle .
źródło
$('.maps.embed-container').find('iframe').css("pointer-events", "none");
Ponownie edytuję kod napisany przez #nathanielperales, który naprawdę dla mnie zadziałał. Prosty i łatwy do złapania, ale działa tylko raz. Więc dodałem mouseleave () w JavaScript. Pomysł zaadaptowany z #Bogdan A teraz jest idealny. Spróbuj tego. Kredyty trafiają do #nathanielperales i #Bogdan. Właśnie połączyłem oba pomysły. Dzięki chłopaki. Mam nadzieję, że pomoże to również innym ...
HTML
CSS
jQuery
Improvise - Adapt - Overcome
A oto przykład jsFiddle.
źródło
pointer-events: auto
dopiero po „najechaniu” myszką na mapę przez określony czas? tzn. uruchom licznik czasu, gdy mysz wejdzie w ramkę iframe, i zresetuj go, gdy mysz wyjdzie. Jeśli czasomierz osiągnie X milisekund, przełącz napointer-events: auto
. I za każdym razem, gdy mysz opuszcza element iframe, po prostu przełączasz się z powrotempointer-events: none
.Tak, to całkiem proste. Napotkałem podobny problem. Po prostu dodaj właściwość css „pointer-events” do div iframe i ustaw na „none” .
Przykład: <iframe style = "pointer-events: none" src = ........>
SideNote: Ta poprawka wyłączałaby wszystkie inne zdarzenia myszy na mapie. To działało dla mnie, ponieważ nie wymagaliśmy żadnej interakcji użytkownika na mapie.
źródło
źródło
Po przeprowadzeniu badań masz 2 opcje. Ponieważ nowe mapy interfejsu API z osadzonym elementem iframe nie obsługują wyłączania kółka myszy.
Najpierw użyłbym starych map Google ( https://support.google.com/maps/answer/3045828?hl=pl ).
Drugim byłoby utworzenie funkcji javascript w celu uproszczenia osadzania mapy dla każdego komentarza i użycia parametrów (to przykładowy kod tylko do wskazania lokalizacji, aby nie pokazać dokładnego rozwiązania)
źródło
Istnieje niesamowite i łatwe rozwiązanie.
Musisz dodać niestandardową klasę w swoim css, która ustawia zdarzenia wskaźnika do mapowania obszaru roboczego na none:
Następnie za pomocą jQuery możesz dodawać i usuwać tę klasę na podstawie różnych zdarzeń, na przykład:
Stworzyłem przykład w jsfiddle , mam nadzieję, że to pomaga!
źródło
Po prostu rejestruję jedno konto na developers.google.com i otrzymuję token do wywołania interfejsu API Map Google, i po prostu je wyłączam (kółko przewijania: fałsz):
źródło
To jest moje podejście. Łatwo go wdrażać na różnych stronach internetowych i cały czas z niego korzystać
CSS i JavaScript:
W HTML będziesz chciał zawinąć iframe w div.
<div id="map" class="scrolloff" onclick="scrollOn()" onmouseleave="scrollOff()" >
Mam nadzieję, że pomoże to każdemu, kto szuka prostego rozwiązania.
źródło
Oto proste rozwiązanie. Wystarczy ustawić
pointer-events: none
CSS na,<iframe>
aby wyłączyć przewijanie myszy.Jeśli chcesz, aby przewijanie myszy było aktywowane, gdy użytkownik kliknie mapę, użyj następującego kodu JS. Spowoduje to również wyłączenie przewijania myszy, gdy mysz wyjdzie z mapy.
źródło
Aby wyłączyć powiększanie kółka przewijania myszy w osadzonych Mapach Google, wystarczy ustawić właściwość wskaźnik-zdarzenia-css dla elementu iframe na none:
To wszystko .. Całkiem nieźle, co?
źródło
Cóż, dla mnie najlepszym rozwiązaniem było po prostu użycie takiego:
HTML:
CSS:
JS:
WYNIK
Uwagi:
Najlepiej byłoby dodać nakładkę z ciemniejszą przezroczystością z tekstem: „ Kliknij, aby przeglądać ”, gdy kółko myszy jest dezaktywowane. Ale gdy jest ono aktywowane (po kliknięciu), przezroczystość z tekstem zniknie, a użytkownik będzie mógł przeglądać mapa zgodnie z oczekiwaniami. Wszelkie wskazówki, jak to zrobić?
źródło
Dodaj styl, który
pointer-events:none;
działa dobrzeźródło
Najprostszym sposobem na to jest użycie pseudoelementu, takiego jak
:before
lub:after
.Ta metoda nie wymaga żadnych dodatkowych elementów HTML ani jquery.
Jeśli mamy na przykład tę strukturę HTML:
Następnie wszystko, co musimy zrobić, to zrobić opakowanie względem pseudoelementu, który utworzymy, aby zapobiec przewijaniu
Następnie stworzymy pseudoelement, który zostanie umieszczony nad mapą, aby zapobiec przewijaniu:
I gotowe, bez jquery bez dodatkowych elementów HTML! Oto działający przykład jsfiddle: http://jsfiddle.net/e6j4Lbe1/
źródło
Oto moje proste rozwiązanie.
Umieść iframe w div z klasą zwaną na przykład „mapami”.
To będzie CSS twojego iframe
A oto mały skrypt javascript, który ustawi właściwość wskaźnika-zdarzenia iframe na „auto”, gdy najedziesz na element div przez co najmniej 1 sekundę (działa najlepiej dla mnie - ustaw go na cokolwiek chcesz) i wyczyści limit czasu / ustaw ponownie na „none”, gdy mysz opuści element.
Twoje zdrowie.
źródło
Stworzyłem bardzo prostą wtyczkę jQuery, aby rozwiązać problem. Sprawdź to na https://diazemiliano.github.io/googlemaps-scrollprevent
źródło
Korzystając z odpowiedzi @ natanielperales, dodałem funkcję aktywowania, ponieważ dla mnie działa ona lepiej, gdy użytkownik traci koncentrację na mapie, aby zatrzymać przewijanie :)
źródło
Wariacje na temat: proste rozwiązanie z jQuery, nie wymaga edycji CSS.
Detektor najechania jest dołączony do elementu nadrzędnego, więc jeśli bieżący element nadrzędny jest większy, możesz po prostu owinąć element iframe div przed trzecim wierszem.
Mam nadzieję, że przyda się komuś.
źródło
Natknąłem się na tej kwestii siebie i używane niektóre mashup dwóch bardzo przydatnych odpowiedzi na to pytanie: czerasz 's odpowiedź i Massa jest odpowiedź.
Oba mają dużo prawdy, ale gdzieś w moich testach dowiedziałem się, że jeden nie działa na urządzeniach mobilnych i ma słabą obsługę IE (działa tylko na IE11). Jest to rozwiązanie autorstwa nathanielperales, a następnie rozszerzone przez czerasz, który opiera się na css pointer-events i który nie działa na urządzeniach mobilnych (nie ma wskaźnika na urządzeniach mobilnych) i nie działa na żadnej wersji IE, która nie jest w wersji 11 . Zwykle nie przejmowałbym się tym mniej, ale jest tam mnóstwo użytkowników i chcemy spójnej funkcjonalności, więc wybrałem rozwiązanie nakładki, używając opakowania, aby ułatwić kodowanie.
Mój znacznik wygląda następująco:
Następnie style są takie:
Na koniec skrypt:
Dodałem również moje przetestowane rozwiązanie do listy GitHub , jeśli chcesz dostać stamtąd ...
źródło
Jest to rozwiązanie z CSS i Javascript (tj. Jquery, ale działa również z czystym Javascript). Jednocześnie mapa reaguje. Unikaj powiększania mapy podczas przewijania, ale mapę można aktywować, klikając ją.
JavaScript / JQuery JavaScript
CSS
Baw się dobrze !
źródło
W Google Maps v3 możesz teraz wyłączyć przewijanie, aby powiększyć, co prowadzi do znacznie lepszej wygody użytkownika. Inne funkcje mapy będą nadal działać i nie potrzebujesz dodatkowych div. Pomyślałem również, że użytkownik powinien otrzymać informację zwrotną, aby mógł zobaczyć, kiedy przewijanie jest włączone, dlatego dodałem obramowanie mapy.
źródło
To da Ci responsywną mapę Google, która zatrzyma przewijanie ramki iframe, ale po kliknięciu pozwoli ci powiększyć.
Skopiuj i wklej to do swojego HTML, ale zastąp link iframe swoim własnym. Jest to artykuł na ten temat z przykładem: Wyłącz powiększanie kółka myszy w osadzonych elementach iframe Google Maps
źródło
Oto moje podejście do tego.
Wrzuć to do mojego pliku main.js lub podobnego:
Następnie po prostu wstaw pusty div, w którym chcesz, aby mapa pojawiła się na twojej stronie.
<div id="map"></div>
Oczywiście musisz również zadzwonić w interfejsie API Map Google. Po prostu utworzyłem plik o nazwie mapi.js i wrzuciłem go do mojego folderu / js. Ten plik musi zostać wywołany przed powyższym javascript.
Po wywołaniu pliku mapi.js pamiętaj, aby przekazać mu atrybut false czujnika.
to znaczy:
<script type="text/javascript" src="js/mapi.js?sensor=false"></script>
Nowa wersja 3 interfejsu API z jakiegoś powodu wymaga włączenia czujnika. Upewnij się, że dołączasz plik mapi.js przed plikiem main.js.
źródło
W przypadku Google Maps v2 - GMap2:
źródło
jeśli masz element iframe korzystający z wbudowanego interfejsu API mapy Google w następujący sposób:
możesz dodać ten styl css: pointer-event: none; ES.
źródło
Oto moje zdanie na temat odpowiedzi @nathanielperales rozszerzonej o @chams, teraz przeze mnie ponownie.
HTML
jQuery
źródło
Najprostszy :
źródło
Dodaj to do skryptu:
źródło
Oto moje rozwiązanie problemu, budowałem stronę WP, więc jest tu trochę kodu php. Ale klucz znajduje się
scrollwheel: false,
w obiekcie mapy.Mam nadzieję, że to pomoże. Twoje zdrowie
źródło