Bagus! Sayangnya, saya tidak bisa membuatnya berfungsi. Situasi saya sedikit berbeda: Saya bekerja dengan situs yang memiliki lebar 980px. Kontennya langsung ke tepi desain, jadi pada iPad, tampilannya terlihat canggung. Saya pikir saya akan mengatur viewport ke lebar 1020px untuk memungkinkan margin 20px di kedua sisi ... tapi tidak berhasil: viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=1020'); (Hanya untuk beberapa konteks: Saya meletakkan ini dalam contoh Drupal yang agak terkunci ... jadi saya tidak memiliki akses langsung ke area kepala dan perlu menggunakan Javascript)
Sam
7
Ini seharusnya cukup mudah. Langsung tulis saja. Jika Anda menggunakan jQuery akan menjadi seperti ini: $('head').append('<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">'); atau, tanpa jQuery:document.getElementsByTagName('head')[0].appendChild( ... );
markquezada
3
Untuk atribut konten, pemeriksa web safari seluler menampilkan kesalahan pada titik koma. Ini tampaknya lebih valid:viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0');
jfroom
1
@the_nuts Anda benar, appendChild mengharapkan node, bukan string. Diperbarui. Terima kasih.
markquezada
1
@basZero: Anda dapat menggunakan agen pengguna untuk memeriksa perangkat mana yang menjalankan skrip sebelum menjalankan kode di atas, tetapi secara umum menurut saya itu ide yang buruk. Cobalah untuk menggeneralisasi berdasarkan fitur perangkat (atau ukuran layar jika harus), bukan perangkat sebenarnya. Misalnya, Anda dapat mendeteksi apakah perangkat mendukung peristiwa sentuh, dll. (Yaitu, dengan modernizr ). Tergantung pada apa yang Anda coba lakukan.
Tag viewport akan diperbarui, tetapi pinch zoom masih aktif !! Saya harus menemukan cara untuk mendapatkan halaman untuk mengambil perubahan ...
Ini adalah solusi peretasan, tetapi mengubah opacity tubuh melakukan triknya. Saya yakin ada cara lain untuk mencapai ini, tetapi inilah yang berhasil untuk saya.
// after updating viewport tag, force the page to pick up changes
document.body.style.opacity =.9999;
setTimeout(function(){
document.body.style.opacity =1;},1);
LANGKAH 3
Masalah saya sebagian besar telah terpecahkan pada saat ini, tetapi tidak sepenuhnya. Saya perlu mengetahui tingkat zoom halaman saat ini sehingga saya dapat mengubah ukuran beberapa elemen agar sesuai dengan halaman (pikirkan penanda peta).
// check zoom level during user interaction, or on animation framevar currentZoom = $document.width()/ window.innerWidth;
Saya harap ini membantu seseorang. Saya menghabiskan beberapa jam membenturkan mouse saya sebelum menemukan solusi.
Ini menyelamatkan hidup saya, tetapi saya memiliki sedikit masalah dengannya: dengan asumsi Anda menampilkan gambar dalam div overlay pada 100% dan memperbesarnya pada perangkat seluler, Anda akan memperbesar menggunakan implementasi zoom browser asli yang biasanya hanya menskalakan yang terlihat area tanpa rendering ulang file asli. Di sisi lain, jika saya menghapus "width = device-width" untuk status zoom yang dinonaktifkan, itu membuat gambar menjadi bagus saat diperbesar tetapi saya kehilangan posisi halaman terakhir saya ketika div 100% ditutup ...
viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=1020');
(Hanya untuk beberapa konteks: Saya meletakkan ini dalam contoh Drupal yang agak terkunci ... jadi saya tidak memiliki akses langsung ke area kepala dan perlu menggunakan Javascript)$('head').append('<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">');
atau, tanpa jQuery:document.getElementsByTagName('head')[0].appendChild( ... );
viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0');
di Anda
<head>
di suatu tempat di javascript Anda
... tapi semoga berhasil dengan mengutak-atiknya untuk perangkat Anda, mengutak-atik berjam-jam ... dan saya masih belum sampai!
sumber
sumber
Ini telah dijawab untuk sebagian besar, tetapi saya akan memperluas ...
Langkah 1
Tujuan saya adalah mengaktifkan zoom pada waktu tertentu, dan menonaktifkannya di waktu lain.
Langkah 2
Tag viewport akan diperbarui, tetapi pinch zoom masih aktif !! Saya harus menemukan cara untuk mendapatkan halaman untuk mengambil perubahan ...
Ini adalah solusi peretasan, tetapi mengubah opacity tubuh melakukan triknya. Saya yakin ada cara lain untuk mencapai ini, tetapi inilah yang berhasil untuk saya.
LANGKAH 3
Masalah saya sebagian besar telah terpecahkan pada saat ini, tetapi tidak sepenuhnya. Saya perlu mengetahui tingkat zoom halaman saat ini sehingga saya dapat mengubah ukuran beberapa elemen agar sesuai dengan halaman (pikirkan penanda peta).
Saya harap ini membantu seseorang. Saya menghabiskan beberapa jam membenturkan mouse saya sebelum menemukan solusi.
sumber