Chcę wyłączyć ten zoom double-tap funkcjonalności na określonych elementów w przeglądarce (na urządzeniach dotykowych), bez wyłączania wszystkich funkcji zoom .
Na przykład: jeden element można stuknąć wiele razy, aby coś się wydarzyło. Działa to dobrze w przeglądarkach na komputerze (zgodnie z oczekiwaniami), ale w przeglądarkach urządzeń dotykowych zostanie powiększone.
Odpowiedzi:
Uwaga (stan na 2020-08-04): to rozwiązanie nie działa w iOS Safari v12 +. Zaktualizuję tę odpowiedź i usunę tę notatkę, gdy znajdę jasne rozwiązanie, które obejmuje iOS Safari.
Tylko rozwiązanie CSS
Dodaj
touch-action: manipulation
do dowolnego elementu, dla którego chcesz wyłączyć powiększanie podwójnym dotknięciem, tak jak w przypadku następującejdisable-dbl-tap-zoom
klasy:Z
touch-action
dokumentacji (wyróżnienie moje):Ta wartość działa na Androidzie i iOS.
źródło
Użyłem tego bardzo niedawno i działa dobrze na iPadzie. Nie testowałem na Androidzie ani innych urządzeniach (ponieważ strona będzie wyświetlana tylko na iPadzie).
źródło
Wiem, że to może być stare, ale znalazłem rozwiązanie, które działało idealnie dla mnie. Nie ma potrzeby stosowania zwariowanych metatagów i zatrzymywania powiększania treści.
Nie jestem w 100% pewien, jak to jest na różnych urządzeniach, ale zadziałało dokładnie tak, jak chciałem.Spowoduje to po prostu wyłączenie normalnej funkcji stukania, a następnie ponowne wywołanie standardowego zdarzenia kliknięcia. Zapobiega to powiększaniu urządzenia mobilnego, ale poza tym działa normalnie.
EDYCJA: Zostało to teraz przetestowane i uruchomione w kilku aplikacjach na żywo. Wydaje się być w 100% między przeglądarkami i platformą. Powyższy kod powinien działać jako rozwiązanie kopiuj-wklej w większości przypadków, chyba że chcesz zachować niestandardowe zachowanie przed zdarzeniem kliknięcia.
źródło
pointer-events: none
Chciałem tylko poprawnie odpowiedzieć na moje pytanie, ponieważ niektórzy ludzie nie czytają komentarzy pod odpowiedzią. Więc oto jest:
Nie napisałem tego, po prostu zmodyfikowałem. Znalazłem wersję tylko dla iOS tutaj: https://gist.github.com/2047491 (dzięki Kablam)
źródło
CSS, aby globalnie wyłączyć powiększanie podwójnym dotknięciem (na dowolnym elemencie):
Dzięki Ross, moja odpowiedź rozszerza jego: https://stackoverflow.com/a/53236027/9986657
źródło
document.getElementById('root').addEventListener('click', () => {})
Jeśli potrzebujesz wersji, która działa bez jQuery , zmodyfikowałem odpowiedź Woutera Konecnego (która również została stworzona przez zmodyfikowanie tego sedna przez Johana Sundströma ), aby używała waniliowego JavaScript.
Następnie dodaj procedurę obsługi zdarzeń,
touchstart
która wywołuje tę funkcję:źródło
myButton.addEventListener('touchstart', preventZoom);
Należy ustawić właściwość css
touch-action
, abynone
w sposób opisany w tej drugiej odpowiedzi https://stackoverflow.com/a/42288386/1128216źródło
Wyłącz podwójne dotknięcie, aby powiększyć ekrany dotykowe. W zestawie przeglądarka internetowa.
źródło
Proste zapobiec zachowanie domyślne
click
,dblclick
lubtouchend
zdarzenia spowoduje wyłączenie funkcji zoom.Jeśli masz już oddzwonienie na jedno z tych wydarzeń, po prostu zadzwoń do
event.preventDefault()
.źródło
Jeśli jest ktoś taki jak ja, który doświadcza tego problemu podczas korzystania z Vue.js , wystarczy dodać .prevent :
@click.prevent="someAction"
źródło
Zapobiegnie to dwukrotnemu powiększaniu elementów w „treści”, które można zmienić na dowolny inny selektor
Ale to również uniemożliwiło wywołanie zdarzenia kliknięcia po wielokrotnym kliknięciu, więc musiałem powiązać inne zdarzenie, aby wywołać zdarzenia po wielu kliknięciach
Na Touchstart dodałem kod, aby zapobiec powiększeniu i wywołać kliknięcie.
źródło
Zakładam, że mam
<div>
obszar kontenera wejściowego z tekstem, suwakami i przyciskami i chcę powstrzymać przypadkowe dwukrotne dotknięcie<div>
. Poniższe informacje nie przeszkadzają w powiększaniu obszaru wprowadzania i nie dotyczą dwukrotnego dotknięcia i powiększania poza moim<div>
obszarem. Istnieją różnice w zależności od aplikacji przeglądarki.Właśnie tego spróbowałem.
(1) W przypadku przeglądarki Safari na iOS i Chrome na Androida i jest to metoda preferowana. Działa z wyjątkiem aplikacji internetowej na Samsunga, w której wyłącza podwójne dotknięcie nie na pełnym
<div>
, ale przynajmniej na elementach obsługujących dotknięcia. Zwracareturn false
, z wyjątkiem stanutext
irange
danych wejściowych.(2) Opcjonalnie dla wbudowanej aplikacji internetowej na Androida (5.1, Samsung), blokuje dwukrotne dotknięcie
<div>
, ale blokuje powiększanie<div>
:(3) W przypadku przeglądarki Chrome w systemie Android 5.1 w ogóle wyłącza podwójne stuknięcie, nie blokuje powiększania i nie powoduje dwukrotnego stuknięcia w innych przeglądarkach. Hamowanie podwójnego dotknięcia
<meta name="viewport" ...>
jest irytujące, ponieważ<meta name="viewport" ...>
wydaje się dobrą praktyką.źródło
Korzystanie ze zdarzeń dotykowych CSS: brak Całkowicie usuwa wszystkie zdarzenia dotykowe. Po prostu zostawiłem to tutaj na wypadek, gdyby ktoś też miał ten problem, znalezienie tego rozwiązania zajęło mi 2 godziny i to tylko jedna linia css. https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action
źródło
No to ruszamy
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
źródło