Saya sudah memperbarui iPhone 6 plus untuk iOS versi 10 beta dan hanya menemukan bahwa di safari mobile, Anda dapat memperbesar halaman web apapun dengan menekan ganda atau pinching ABAIKAN yang user-scalable=no
kode dalam meta tag. Saya tidak tahu apakah itu bug atau fitur. Jika itu dianggap sebagai fitur, bagaimana cara menonaktifkan safari viewport zooming iOS 10?
diperbaharui di iOS 11/12 rilis, iOS 11 dan iOS 12 safari masih JANGAN TIDAK menghormati user-scalable=no
meta tag.
Jawaban:
Mungkin untuk mencegah penskalaan halaman web di safari di iOS 10, tetapi itu akan melibatkan lebih banyak pekerjaan di pihak Anda. Saya kira argumennya adalah bahwa tingkat kesulitan harus menghentikan devs kargo-kultus dari menjatuhkan "user-scalable = no" ke dalam setiap tag viewport dan membuat hal-hal sulit bagi pengguna yang mengalami gangguan penglihatan.
Namun, saya ingin melihat Apple mengubah implementasinya sehingga ada cara sederhana (meta-tag) untuk menonaktifkan ketuk dua kali untuk memperbesar. Sebagian besar kesulitan berhubungan dengan interaksi itu.
Anda dapat menghentikan pinch-to-zoom dengan sesuatu seperti ini:
Perhatikan bahwa jika ada target yang lebih dalam memanggil stopPropagation pada acara tersebut, acara tidak akan mencapai dokumen dan perilaku penskalaan tidak akan dicegah oleh pendengar ini.
Menonaktifkan ketukan ganda untuk memperbesar serupa. Anda menonaktifkan ketukan pada dokumen yang terjadi dalam 300 milidetik dari ketukan sebelumnya:
Jika Anda tidak mengatur elemen formulir Anda dengan benar, memfokuskan pada input akan memperbesar otomatis, dan karena Anda sebagian besar telah menonaktifkan zoom manual, sekarang hampir tidak mungkin untuk unzoom. Pastikan ukuran font input adalah> = 16px.
Jika Anda mencoba menyelesaikan ini di WKWebView di aplikasi asli, solusi yang diberikan di atas layak, tetapi ini adalah solusi yang lebih baik: https://stackoverflow.com/a/31943976/661418 . Dan seperti yang disebutkan dalam jawaban lain, di iOS 10 beta 6, Apple kini telah memberikan bendera untuk menghormati tag meta.
Pembaruan Mei 2017: Saya mengganti metode lama 'check touches on touchstart' untuk menonaktifkan pinch-zoom dengan pendekatan 'check event.cale on touchmove' yang lebih sederhana. Harus lebih dapat diandalkan untuk semua orang.
sumber
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
dan jika browser tidak menghormati tag meta, itu adalah desain browser yang sangat buruk. Yang lain seperti desain yang sangat buruk ini adalah tindakan mundur / maju dengan menggeser, yang tidak dapat dicegah di iOS 9/10. Itu sangat parah menyeret tindakan di dalam aplikasi web.preventDefault
aktiftouchmove
. Anda tidak dapat (sepenuhnya) menonaktifkan zoom tanpa menonaktifkan gulir.If you don't set up your form elements right, focusing on an input will auto-zoom, and since you have mostly disabled manual zoom, it will now be almost impossible to unzoom. Make sure the input font size is >= 16px.
Ini adalah fitur baru di iOS 10.
Dari catatan rilis iOS 10 beta 1:
Saya berharap kita akan segera melihat add-on JS untuk menonaktifkan ini dalam beberapa cara.
sumber
Saya sudah bisa memperbaikinya menggunakan
touch-action
properti css pada elemen individual. Coba aturtouch-action: manipulation;
elemen yang biasanya diklik, seperti tautan atau tombol.sumber
touch-action: none;
untuk mengontrol semua gerakan sendiri.touch-action: none
hanyamanipulatoin
yang meninggalkan masalah pinch-zoom seperti itu.Tampaknya perilaku ini seharusnya diubah dalam beta terbaru, yang pada saat penulisan adalah beta 6.
Dari catatan rilis untuk iOS 10 Beta 6:
Namun, dalam pengujian (sangat terbatas) saya, saya belum dapat mengkonfirmasi hal ini.
Sunting: diverifikasi, iOS 10 Beta 6 menghormati
user-scalable=no
secara default untuk saya.sumber
WKWebView
bukan ke Safari. Sumber: Salah satu aplikasi peta kami rusak dan kami tidak tahu cara memperbaikinya.WKWebView
dan agak berasumsi bahwa pertanyaan awal ditanyakanWKWebView
ketika menulis jawaban saya. Jadi saya kira bahwa selama salah satu versi beta pertama, Apple mengubah perilakuWKWebView
Safari seluler dan keduanya , kemudian di beta 6, mereka mengembalikan perilakuWKWebView
tetapi menyimpannya untuk Safari seluler.user-scalable=no
. Saya tidak yakin mengapa mereka akan membatalkan ini, hanya untuk mengembalikannya, hanya untuk menghapusnya lagi.Solusi yang bekerja di Mobile Safari saat ini penulisan, adalah memiliki argumen ketiga di
addEventListener
be{ passive: false }
, sehingga solusi terlihat penuh seperti ini:Anda mungkin ingin memeriksa apakah opsi yang didukung tetap kompatibel.
sumber
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
.<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, user-scalable=no, shrink-to-fit=no" />
dan<meta name="HandheldFriendly" content="true">
Saya menghabiskan sekitar satu jam mencari opsi javascript yang lebih kuat, dan tidak menemukannya. Kebetulan bahwa dalam beberapa hari terakhir saya telah mengutak-atik hammer.js (Hammer.js adalah perpustakaan yang memungkinkan Anda memanipulasi semua jenis acara sentuh dengan mudah) dan sebagian besar gagal pada apa yang saya coba lakukan.
Dengan peringatan itu, dan memahami saya sama sekali bukan ahli javascript, ini adalah solusi yang saya buat dengan yang pada dasarnya memanfaatkan hammer.js untuk menangkap peristiwa pinch-zoom dan double-tap dan kemudian login dan buang.
Pastikan Anda memasukkan hammer.js di halaman Anda dan kemudian coba tempelkan javascript ini di kepala di suatu tempat:
sumber
.preventDefault
ke semua penangan isyarat palu. Saya menggunakan swipe / pinch / pan / tap bersama, saya telah menambahkannya ke semua penangan, saya tidak tahu apakah ada yang spesifik yang melakukan pekerjaan itu.Saya mencoba jawaban sebelumnya tentang pinch-to-zoom
namun terkadang layar masih diperbesar ketika acara.touches.length> 1 Saya menemukan cara terbaik adalah menggunakan acara touchmove, untuk menghindari jari bergerak di layar. Kode akan menjadi seperti ini:
Semoga ini bisa membantu.
sumber
Periksa faktor skala dalam acara sentuh lalu hindari acara sentuh.
sumber
Kita bisa mendapatkan semua yang kita inginkan dengan menyuntikkan satu aturan gaya dan dengan mencegat acara zoom:
✔ Menonaktifkan pinch zoom.
✔ Nonaktifkan zoom ketuk dua kali.
✔ Gulir tidak terpengaruh.
✔ Nonaktifkan sorotan ketuk (yang dipicu, di iOS, oleh aturan gaya).
PEMBERITAHUAN: Tweak deteksi iOS sesuai keinginan Anda. Lebih lanjut tentang itu di sini .
Permintaan maaf kepada lukejackson dan Piotr Kowalski , yang jawabannya muncul dalam bentuk yang diubah dalam kode di atas.
sumber
addEventListener
jawaban berdasarkan dan meneruskan{ passive: false }
sebagaioptions
parameter alih-alihfalse
. Namun, untuk kompatibilitas mundur Anda harus lulusfalse
kecualipassive
bidang opsi didukung. Lihat developer.mozilla.org/en-US/docs/Web/API/EventTarget/…Saya datang dengan solusi yang cukup naif, tetapi tampaknya berhasil. Tujuan saya adalah untuk mencegah ketukan ganda yang tidak disengaja diartikan sebagai zoom in, sembari menjaga pinch to zoom berfungsi untuk aksesibilitas.
Idenya adalah dalam mengukur waktu antara yang pertama
touchstart
dan keduatouchend
dalam satu ketukan ganda dan kemudian mengartikan yang terakhirtouchend
sebagai klik jika jeda terlalu kecil. Meskipun mencegah pembesaran yang tidak disengaja, metode ini tampaknya membuat daftar bergulir tidak terpengaruh, ini bagus. Tidak yakin apakah saya belum melewatkan apa pun.Terinspirasi oleh intisari dari mutewinter dan jawaban Joseph .
sumber
Dalam kasus khusus saya, saya menggunakan Babylon.js untuk membuat adegan 3D dan seluruh halaman saya terdiri dari satu kanvas layar penuh. Mesin 3D memiliki fungsi zoom sendiri tetapi pada iOS pinch-to-zoom mengganggu itu. Saya memperbarui jawaban @Joseph untuk mengatasi masalah saya. Untuk menonaktifkannya, saya menemukan bahwa saya perlu melewatkan {pasif: false} sebagai opsi untuk pendengar acara. Kode berikut ini berfungsi untuk saya:
sumber
Walaupun kedengarannya aneh, setidaknya untuk Safari di iOS 10.2, ketuk dua kali untuk memperbesar secara ajaib dinonaktifkan jika elemen Anda atau leluhurnya memiliki salah satu dari yang berikut:
cursor: pointer
set dalam CSSsumber
Zoom tidak disengaja cenderung terjadi ketika:
Untuk mencegah perilaku ketuk ganda, saya menemukan dua solusi yang sangat sederhana:
Kedua hal ini mencegah Safari (iOS 10.3.2) tidak memperbesar tombol. Seperti yang Anda lihat satu hanya JavaScript, yang lain hanya CSS. Gunakan dengan tepat.
Berikut ini adalah demo: https://codepen.io/lukejacksonn/pen/QMELXQ
Saya belum mencoba untuk mencegah perilaku cubitan (belum), terutama karena saya cenderung tidak membuat antarmuka multi-sentuh untuk web dan kedua saya telah datang ke gagasan bahwa mungkin semua antarmuka termasuk UI aplikasi asli harus "cubit untuk memperbesar" -dapat di tempat. Saya masih merancang untuk menghindari pengguna harus melakukan ini untuk membuat UI Anda dapat diakses oleh mereka, dengan cara apa pun.
sumber
Menemukan pekerjaan sederhana ini yang tampaknya mencegah klik dua kali untuk memperbesar:
sumber
Seperti yang diminta, saya telah mentransfer komentar saya ke sebuah jawaban sehingga orang dapat membatalkannya:
Ini berfungsi 90% dari waktu untuk iOS 13:
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, user-scalable=no, shrink-to-fit=no" />
dan
<meta name="HandheldFriendly" content="true">
sumber
Saya memeriksa semua jawaban di atas dalam praktek dengan halaman saya di iOS (iPhone 6, iOS 10.0.2), tetapi tidak berhasil. Ini solusi kerja saya:
sumber
ini bekerja untuk saya:
sumber