menonaktifkan viewport zooming iOS 10+ safari?

164

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=nokode 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=nometa tag.

situs github seluler di Safari

Sam Su
sumber
2
Fitur aksesibilitas: Dari catatan di Safari di iOS 10 twitter.com/thomasfuchs/status/742531231007559680/photo/1
ErikE
87
Tidak. Ini adalah praktik buruk untuk konten web normal. Untuk aplikasi web, perilaku zoom default dapat sepenuhnya merusak kegunaan. Misalnya, tidak ada yang ingin memperbesar tombol saluran atas karena mereka mengetuknya dua kali, atau memperbesar bagian dari permainan video karena mereka mengetuk tombol lompat dua kali. Ada alasan mengapa fitur ini ditambahkan sejak awal, dan tidak masuk akal untuk merusak kegunaan bagi semua orang hanya karena beberapa "perancang web" tidak tahu apa yang mereka lakukan. Berteriaklah pada desainer situs dan berhentilah merusak browser.
dgatwood
36
Mengatakan itu "praktik buruk" adalah pendapat dan tidak mengubah fakta bahwa Apple berkeras mengambil standar web yang komunitas habiskan berbulan-bulan / tahun / dekade untuk diimplementasikan lintas platform dan mengambil omong kosong besar pada mereka. Mengapa Apple mendikte bahwa perancang web tidak tahu apa yang mereka lakukan? Argumen yang mengerikan.
samrap
2
Secara pribadi, saya pikir ini berasal dari kode boilerplate online di mana dev hanya menyalin dan menempel secara membabi buta tanpa mengetahui apa tujuan kode tersebut.
William Isted
7
Jawabannya sederhana, Apple: menjadikan penonaktifan tag meta sebagai pengaturan aksesibilitas default-off. Mereka yang membutuhkannya, akan memilikinya, tanpa menghukum mereka yang tidak.
Ruben Martinez Jr.

Jawaban:

94

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:

document.addEventListener('touchmove', function (event) {
  if (event.scale !== 1) { event.preventDefault(); }
}, false);

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:

var lastTouchEnd = 0;
document.addEventListener('touchend', function (event) {
  var now = (new Date()).getTime();
  if (now - lastTouchEnd <= 300) {
    event.preventDefault();
  }
  lastTouchEnd = now;
}, false);

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.

Joseph
sumber
3
Perhatikan bahwa hack touchstart tidak konsisten ... dan jika Anda berhasil menghindarinya, Anda terjebak dalam kondisi yang sangat tidak nyaman
Sam Saffron
5
Misalnya. aplikasi pemetaan layar penuh, ada fitur zoom yang dikodekan secara keras dalam aplikasi pemetaan (Google Maps JS, Leaflet dll.). Saran Google untuk menambahkan tag meta <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.
Timo Kähkönen
4
Jika pengguna mulai menyeret dengan satu jari kemudian meletakkan jari kedua di layar akan dapat mencubit-zoom. Anda dapat menonaktifkan zoom dan gulir dengan preventDefaultaktif touchmove. Anda tidak dapat (sepenuhnya) menonaktifkan zoom tanpa menonaktifkan gulir.
Paolo
10
Wow, bagian ini (saya akan tempel di sini) sangat membantu saya. Saya belum melihat ini disebutkan oleh orang lain DI MANA SAJA di internet. Butuh waktu berjam-jam untuk memperbaiki masalah ini. Saya benar-benar kecewa dengan pilihan desain UX Apple tentang hal ini, di mana bentuk zoom-in otomatis tetapi kemudian tidak tampilannya mundur. 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.
Ryan
6
Tampaknya ini tidak berfungsi lagi di iOS 12. Adakah cara untuk membuat ini berfungsi untuk iOS 12?
TJR
78

Ini adalah fitur baru di iOS 10.

Dari catatan rilis iOS 10 beta 1:

  • Untuk meningkatkan aksesibilitas pada situs web di Safari, pengguna sekarang dapat mencubit untuk memperbesar bahkan ketika situs web diatur user-scalable=nodalam viewport.

Saya berharap kita akan segera melihat add-on JS untuk menonaktifkan ini dalam beberapa cara.

Paul Gerarts
sumber
4
@ Onza: Saya rasa itu tidak buruk. Saya pikir itu bagus. Menonaktifkan pinch / zooming (perilaku pengguna default) dianggap buruk, dan banyak situs web seluler melakukannya. Satu-satunya kasus pengguna yang dapat diterima adalah aplikasi web nyata yang terlihat dan terasa seperti aplikasi.
wouterds
6
Buruk .. Saya mengubah viewport menggunakan js dan memblokir zoom hanya ketika beberapa elemen dipilih di situs web sekarang rusak karena "keputusan" ini. Jika seseorang memutuskan untuk memblokirnya - ada alasannya.
Zhenya
9
@Karlth tempat tidurnya sangat untuk pengembang game
Sandeep
14
Saya memiliki iOS 10.0.2, user-scalable = tidak tidak menonaktifkan pembesaran lagi di situs web kami ... Masalah utama kami dengan pembesaran adalah dengan menu sisi tetap kami .. Hanya merusak tata letak .. Adakah ide atau solusi untuk ini? Saya mengerti bahwa zooming baik untuk aksesibilitas, kami membuat zooming tersedia pada bagian-bagian tertentu dari situs kami menggunakan js events (hammer) & css .. Saya tidak melihat mengapa aturan harus diberlakukan pada semua orang, sepertinya PC Police mulai untuk mengambil alih dunia dev kita juga ?!
webkit
49
"Satu-satunya kasus pengguna yang dapat diterima adalah aplikasi web nyata yang terlihat dan terasa seperti aplikasi." - dan ini adalah, seperti yang Anda katakan, nyata, kasus penggunaan diterima, yang tidak bahwa jarang ..
Florrie
21

Saya sudah bisa memperbaikinya menggunakan touch-actionproperti css pada elemen individual. Coba atur touch-action: manipulation;elemen yang biasanya diklik, seperti tautan atau tombol.

iainbeeston
sumber
1
"manipulasi" tidak mencegah pinch zoom, hanya zoom ketuk dua kali.
Moos
4
Ini harus menjadi jawaban yang diterima. Anda dapat menggunakan touch-action: none;untuk mengontrol semua gerakan sendiri.
Guy Sopher
3
ini hebat - menonaktifkan zoom dua ketuk sementara meninggalkan pinch zoom, yang HARUS dianggap sebagai gerakan - ketukan ganda tidak boleh. 1 anjing adalah seekor anjing. 1 anjing + 1 anjing tidak termasuk dalam pesawat luar angkasa. Itu membuat 2 anjing, dan mereka melakukan hal-hal yang Anda harapkan 2 anjing lakukan. Saya tidak pernah berharap 2 anjing menjadi pesawat ulang-alik. Tidak pernah.
Larry
5
@GuySopher iOS tidak tidak memberikan touch-action: nonehanya manipulatoinyang meninggalkan masalah pinch-zoom seperti itu.
humanityANDpeace
14

Tampaknya perilaku ini seharusnya diubah dalam beta terbaru, yang pada saat penulisan adalah beta 6.

Dari catatan rilis untuk iOS 10 Beta 6:

WKWebViewsekarang default untuk menghormati user-scalable=nodari viewport. Klien dari WKWebViewdapat meningkatkan aksesibilitas dan memungkinkan pengguna untuk mencubit-to-zoom pada semua halaman dengan menyetel WKWebViewConfiguration properti ignoresViewportScaleLimitsuntuk YES.

Namun, dalam pengujian (sangat terbatas) saya, saya belum dapat mengkonfirmasi hal ini.

Sunting: diverifikasi, iOS 10 Beta 6 menghormati user-scalable=nosecara default untuk saya.

Cellane
sumber
11
10.0.1 di sini. Tidak menghormatinya. Ada apa dengan Apple menyingkirkan fitur yang semua orang butuhkan ..
Lifwanian
1
Ini merujuk WKWebView bukan ke Safari. Sumber: Salah satu aplikasi peta kami rusak dan kami tidak tahu cara memperbaikinya.
Fabio Poloni
Aha! Maaf, saya datang ke sini ketika mencari solusi untuk bug / fitur yang sama WKWebViewdan agak berasumsi bahwa pertanyaan awal ditanyakan WKWebViewketika menulis jawaban saya. Jadi saya kira bahwa selama salah satu versi beta pertama, Apple mengubah perilaku WKWebViewSafari seluler dan keduanya , kemudian di beta 6, mereka mengembalikan perilaku WKWebViewtetapi menyimpannya untuk Safari seluler.
Cellane
1
10.0.2 tidak menghormati user-scalable=no. Saya tidak yakin mengapa mereka akan membatalkan ini, hanya untuk mengembalikannya, hanya untuk menghapusnya lagi.
Aidan Hakimian
13

Solusi yang bekerja di Mobile Safari saat ini penulisan, adalah memiliki argumen ketiga di addEventListenerbe { passive: false }, sehingga solusi terlihat penuh seperti ini:

document.addEventListener('touchmove', function (event) {
  if (event.scale !== 1) { event.preventDefault(); }
}, { passive: false });

Anda mungkin ingin memeriksa apakah opsi yang didukung tetap kompatibel.

Casper Fabricius
sumber
3
Adakah yang mencoba ini di iOS 12? Saya menambahkan kode di atas dan tidak melakukan apa pun untuk webapp saya. Masih bisa memperbesar Safari bodoh ini. Saya meta tag viewport terlihat seperti ini btw: <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">.
Patrick DaVader
1
@PatrickDaVader Yap, tidak dapat menemukan solusi yang berfungsi untuk iOS 12 Safari. Mendapatkan mabuk laut dari semua pembesaran tanpa henti.
Jamie Birch
1
Yang ini berfungsi di iOS 13. Tag <meta> saya meliputi: <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">
Sterling Bourne
1
@SterlingBourne Menyalin pengaturan Anda. Bekerja, tetapi hanya menyukai 90% dari waktu. Tidak yakin mengapa tidak sepanjang waktu.
Hillcow
1
Tanggapan @SterlingBourne bekerja untuk saya! Terima kasih. Dia harus mempostingnya sebagai jawaban daripada komentar sehingga dapat dipilih <meta name = "viewport" content = "width = lebar perangkat, skala awal = 1, skala maksimum = 1, viewport-fit = penutup, user-scalable = no, shrink-to-fit = no "/> dan <meta name =" HandheldFriendly "content =" true ">
Gene Black
8

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:

< script type = "text/javascript" src="http://hammerjs.github.io/dist/hammer.min.js"> < /script >
< script type = "text/javascript" >

  // SPORK - block pinch-zoom to force use of tooltip zoom
  $(document).ready(function() {

    // the element you want to attach to, probably a wrapper for the page
    var myElement = document.getElementById('yourwrapperelement');
    // create a new hammer object, setting "touchAction" ensures the user can still scroll/pan
    var hammertime = new Hammer(myElement, {
      prevent_default: false,
      touchAction: "pan"
    });

    // pinch is not enabled by default in hammer
    hammertime.get('pinch').set({
      enable: true
    });

    // name the events you want to capture, then call some function if you want and most importantly, add the preventDefault to block the normal pinch action
    hammertime.on('pinch pinchend pinchstart doubletap', function(e) {
      console.log('captured event:', e.type);
      e.preventDefault();
    })
  });
</script>

sporker
sumber
Saya juga telah mencoba menyelesaikan masalah ini ketika bekerja dengan hammer.js, dan dapat mengonfirmasi bahwa saya dapat mencegah zoom viewport dengan menambahkan a .preventDefaultke 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.
Conan
6

Saya mencoba jawaban sebelumnya tentang pinch-to-zoom

document.documentElement.addEventListener('touchstart', function (event) {
    if (event.touches.length > 1) {
        event.preventDefault();
    }
}, false);

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:

document.documentElement.addEventListener('touchmove', function (event) {
    event.preventDefault();      
}, false);

Semoga ini bisa membantu.

Chihying Wu
sumber
7
Ini hanya berfungsi jika aplikasi Anda sangat cocok ... jika Anda memiliki konten yang dapat digulir, itu tidak berfungsi ... peretasan yang bagus untuk beberapa skenario.
eljamz
8
Ini bahkan menonaktifkan gulir di situs web. BAD
Gags
@eljamz terima kasih telah memberi tahu saya dan ya.. aplikasi saya sangat cocok di layar.
Chihying Wu
@ Barang Saya belum menguji fungsi gulir, terima kasih sudah memberi tahu saya.
Chihying Wu
6

Periksa faktor skala dalam acara sentuh lalu hindari acara sentuh.

document.addEventListener('touchmove', function(event) {
    event = event.originalEvent || event;
    if(event.scale > 1) {
        event.preventDefault();
    }
}, false);
Parmod
sumber
2
iOS 13 mengubah false menjadi {pasif: false}
wayofthefuture
6

Kita bisa mendapatkan semua yang kita inginkan dengan menyuntikkan satu aturan gaya dan dengan mencegat acara zoom:

$(function () {
  if (!(/iPad|iPhone|iPod/.test(navigator.userAgent))) return
  $(document.head).append(
    '<style>*{cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}</style>'
  )
  $(window).on('gesturestart touchmove', function (evt) {
    if (evt.originalEvent.scale !== 1) {
      evt.originalEvent.preventDefault()
      document.body.style.transform = 'scale(1)'
    }
  })
})

✔ 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.

jeff_mcmahan
sumber
Ini berfungsi pada emulator iPad saya yang menjalankan iOS 11.2. Di iPad asli saya yang menjalankan iOS 11.3 tidak bekerja. Saya menambahkan console.log untuk memastikan acara dipecat dan mereka muncul di konsol. Ini ada hubungannya dengan iOS 11.3? Atau dengan perangkat nyata?
Mathieu R.
1
@MathieuR. Ini adalah masalah iOS 11.3. Itu dapat diperbaiki dengan menggunakan salah satu addEventListenerjawaban berdasarkan dan meneruskan { passive: false }sebagai optionsparameter alih-alih false. Namun, untuk kompatibilitas mundur Anda harus lulus falsekecuali passivebidang opsi didukung. Lihat developer.mozilla.org/en-US/docs/Web/API/EventTarget/…
Josh Gallagher
@ JoshGallagher Bisakah Anda memberikan contoh yang berfungsi? Di iOS11 tidak ada jawaban yang berfungsi untuk saya.
Mick
'Gesturestart' -> preventDefault berfungsi untuk saya saat menulis di iOS 12,2
Michael Camden
5

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 touchstartdan kedua touchenddalam satu ketukan ganda dan kemudian mengartikan yang terakhir touchendsebagai 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.

let preLastTouchStartAt = 0;
let lastTouchStartAt = 0;
const delay = 500;

document.addEventListener('touchstart', () => {
  preLastTouchStartAt = lastTouchStartAt;
  lastTouchStartAt = +new Date();
});
document.addEventListener('touchend', (event) => {
  const touchEndAt = +new Date();
  if (touchEndAt - preLastTouchStartAt < delay) {
    event.preventDefault();
    event.target.click();
  }
});

Terinspirasi oleh intisari dari mutewinter dan jawaban Joseph .

Alexander Kachkaev
sumber
5

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:

window.addEventListener(
    "touchmove",
    function(event) {
        if (event.scale !== 1) {
            event.preventDefault();
        }
    },
    { passive: false }
);
Hamed
sumber
Kasing penggunaan saya juga merupakan adegan 3d halaman penuh dengan kontrol cubit khusus. Saya akan tenggelam jika tidak ada solusi untuk Apple secara eksplisit mengabaikan skala pengguna: tidak ada meta.
Nick Bilyk
1

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:

  1. Pendengar onClick - itu bisa menjadi noop sederhana.
  2. Satu cursor: pointerset dalam CSS
mariomc
sumber
bagaimana dengan mencubit?
Sam Su
Sayangnya, pinch to zoom tidak dicakup oleh solusi ini. Untuk itu, kami menggunakan solusi yang diusulkan di: stackoverflow.com/a/39594334/374196
mariomc
Tidak bekerja untuk saya. Saya menggunakan 10.2.1 Beta 4 pada iPod Touch menggunakan halaman tes ini dan mengetuk dua kali kotak abu-abu yang diperbesar
robocat
1
Saya memiliki ini pada rentang waktu di aplikasi reaksi dan tidak berfungsi.
FMD
1

Zoom tidak disengaja cenderung terjadi ketika:

  • Seorang pengguna mengetuk komponen dari antarmuka
  • Seorang pengguna berinteraksi dengan viewport menggunakan dua digit atau lebih (cubit)

Untuk mencegah perilaku ketuk ganda, saya menemukan dua solusi yang sangat sederhana:

<button onclick='event.preventDefault()'>Prevent Default</button>
<button style='touch-action: manipulation'>Touch Action Manipulation</button>

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.

lukejacksonn
sumber
1

Menemukan pekerjaan sederhana ini yang tampaknya mencegah klik dua kali untuk memperbesar:

    // Convert touchend events to click events to work around an IOS 10 feature which prevents
    // developers from using disabling double click touch zoom (which we don't want).
    document.addEventListener('touchend', function (event) {
        event.preventDefault();
        $(event.target).trigger('click');
    }, false);
Sintaksis
sumber
1

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">

Sterling Bourne
sumber
0

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:

$(window).bind('gesturestart touchmove', function(event) {
    event = event.originalEvent || event;
    if (event.scale !== 1) {
         event.preventDefault();
         document.body.style.transform = 'scale(1)'
    }
});
Piotr Kowalski
sumber
Sayangnya ini hanya berfungsi ketika halaman Anda sangat pas, bukan ketika Anda memiliki konten yang dapat digulir
Sepatu
Hmm. Ini berfungsi baik dengan konten yang dapat digulir, dalam pengalaman saya (iOS 10.3).
jeff_mcmahan
0

ini bekerja untuk saya:

document.documentElement.addEventListener('touchmove', function (event) {
    event.preventDefault();
}, false);
Diego Santa Cruz Mendezú
sumber
Saya mencoba ini, ini memang mencegah pinch zooming, namun menonaktifkan tampilan sentuh viewport sehingga Anda tidak dapat menggulir halaman ke atas dan ke bawah lagi.
TGR