Saya ingin menonaktifkan yang zoom double-tap fungsi pada elemen tertentu di browser (pada perangkat sentuh), tanpa menonaktifkan semua fungsi zoom .
Misalnya: Satu elemen dapat diketuk beberapa kali agar sesuatu terjadi. Ini berfungsi dengan baik di browser desktop (seperti yang diharapkan), tetapi di browser perangkat sentuh, ini akan memperbesar.
Jawaban:
Catatan (per 2020-08-04): solusi ini tampaknya tidak berfungsi di iOS Safari v12 +. Saya akan memperbarui jawaban ini dan menghapus catatan ini setelah saya menemukan solusi jelas yang mencakup Safari iOS.
Solusi khusus CSS
Tambahkan
touch-action: manipulation
ke elemen apa pun yang ingin Anda nonaktifkan zoom tap dua kali, seperti dengandisable-dbl-tap-zoom
kelas berikut :Dari
touch-action
dokumen (penekanan dari saya):Nilai ini berfungsi di Android dan iOS.
sumber
Saya telah menggunakannya baru-baru ini dan berfungsi dengan baik di iPad. Belum diuji di Android atau perangkat lain (karena situs web hanya akan ditampilkan di iPad).
sumber
Saya tahu ini mungkin sudah lama, tetapi saya menemukan solusi yang bekerja dengan sempurna untuk saya. Tidak perlu tag meta gila dan menghentikan pembesaran konten.
Saya tidak 100% yakin bagaimana lintas perangkat itu, tapi berhasil sesuai keinginan saya.Ini hanya akan menonaktifkan fungsi penyadapan normal, dan kemudian memanggil peristiwa klik standar lagi. Ini mencegah perangkat seluler melakukan zoom, tetapi berfungsi seperti biasa.
EDIT: Ini sekarang telah teruji waktu dan berjalan di beberapa aplikasi langsung. Tampaknya 100% lintas-browser dan platform. Kode di atas seharusnya berfungsi sebagai solusi salin-tempel untuk kebanyakan kasus, kecuali Anda menginginkan perilaku khusus sebelum peristiwa klik.
sumber
pointer-events: none
Saya hanya ingin menjawab pertanyaan saya dengan benar karena beberapa orang tidak membaca komentar di bawah jawaban. Jadi begini:
Saya tidak menulis ini, saya hanya memodifikasinya. Saya menemukan versi khusus iOS di sini: https://gist.github.com/2047491 (terima kasih Kablam)
sumber
CSS untuk menonaktifkan zoom ketuk dua kali secara global (pada elemen apa pun):
Terima kasih Ross, jawaban saya meluas: https://stackoverflow.com/a/53236027/9986657
sumber
document.getElementById('root').addEventListener('click', () => {})
Jika Anda membutuhkan versi yang berfungsi tanpa jQuery , saya memodifikasi jawaban Wouter Konecny (yang juga dibuat dengan memodifikasi inti ini oleh Johan Sundström ) untuk menggunakan vanilla JavaScript.
Kemudian tambahkan penangan kejadian
touchstart
yang memanggil fungsi ini:sumber
myButton.addEventListener('touchstart', preventZoom);
Anda harus mengatur properti css
touch-action
untuknone
seperti yang dijelaskan dalam jawaban lain ini https://stackoverflow.com/a/42288386/1128216sumber
Nonaktifkan ketuk dua kali untuk memperbesar layar sentuh. Penjelajah Internet disertakan.
sumber
Sederhana mencegah perilaku default
click
,dblclick
atautouchend
peristiwa akan menonaktifkan fungsionalitas zoom.Jika Anda sudah memiliki panggilan balik di salah satu acara ini, cukup panggil a
event.preventDefault()
.sumber
Jika ada orang seperti saya yang mengalami masalah ini menggunakan Vue.js , cukup menambahkan .prevent sudah cukup :
@click.prevent="someAction"
sumber
Ini akan mencegah zoom tap dua kali pada elemen di 'body' ini dapat diubah ke pemilih lainnya
Namun ini juga mencegah peristiwa klik saya terpicu saat diklik beberapa kali, jadi saya harus mengikat peristiwa lain untuk memicu peristiwa tersebut dengan beberapa klik
Pada touchstart saya menambahkan kode untuk mencegah zoom dan memicu klik.
sumber
Saya berasumsi bahwa saya memiliki
<div>
area wadah input dengan teks, slider dan tombol di dalamnya, dan ingin mencegah ketukan ganda yang tidak disengaja di dalamnya<div>
. Hal berikut tidak menghalangi zoom pada area input, dan ini tidak terkait dengan ketuk dua kali dan zoom di luar<div>
area saya . Ada variasi tergantung pada aplikasi browser.Saya baru mencobanya.
(1) Untuk Safari di iOS, dan Chrome di Android, dan merupakan metode yang disukai. Berfungsi kecuali untuk aplikasi Internet di Samsung, yang menonaktifkan ketukan dua kali tidak secara penuh
<div>
, tetapi setidaknya pada elemen yang menangani ketukan. Ia kembalireturn false
, dengan pengecualiantext
danrange
masukan.(2) Secara opsional untuk aplikasi Internet internal di Android (5.1, Samsung), menghambat ketukan dua kali pada
<div>
, tetapi menghambat zoom pada<div>
:(3) Untuk Chrome di Android 5.1, menonaktifkan ketuk dua kali sama sekali, tidak menghalangi pembesaran, dan tidak melakukan apa pun terkait ketuk dua kali di browser lain. Penghambatan ketuk dua kali
<meta name="viewport" ...>
menjengkelkan, karena<meta name="viewport" ...>
tampaknya praktik yang baik.sumber
Menggunakan kejadian sentuh CSS: tidak ada Benar-benar menghilangkan semua kejadian sentuh. Tinggalkan saja ini di sini jika seseorang juga memiliki masalah ini, butuh waktu 2 jam untuk menemukan solusi ini dan itu hanya satu baris css. https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action
sumber
Kita mulai
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
sumber