Apakah mungkin mendeteksi, menggunakan JavaScript, ketika pengguna mengubah zoom pada halaman? Saya hanya ingin menangkap acara "zoom" dan menanggapinya (mirip dengan acara window.onresize).
Terima kasih.
javascript
events
zoom
pengguna123093
sumber
sumber
Jawaban:
Tidak ada cara untuk secara aktif mendeteksi jika ada zoom. Saya menemukan entri yang bagus di sini tentang bagaimana Anda dapat mencoba mengimplementasikannya.
Anda juga bisa melakukannya menggunakan alat dari posting di atas. Masalahnya adalah Anda lebih atau kurang membuat dugaan tentang apakah halaman tersebut diperbesar atau tidak. Ini akan bekerja lebih baik di beberapa browser daripada yang lain.
Tidak ada cara untuk mengetahui apakah halaman diperbesar jika mereka memuat halaman Anda saat diperbesar.
sumber
document.body.offsetWidth
Saya menggunakan bagian JavaScript ini untuk bereaksi terhadap Zoom "acara".
Itu polling lebar jendela. (Seperti yang disarankan pada halaman ini (yang dikaitkan dengan Ian Elliott): http://novemberborn.net/javascript/page-zoom-ff3 [arsip] )
Diuji dengan Chrome, Firefox 3.6 dan Opera, bukan IE.
Salam, Magnus
sumber
Kabar baik
semua orangbeberapa orang! Peramban yang lebih baru akan memicu peristiwa pengubahan ukuran jendela saat zoom diubah.sumber
Mari kita mendefinisikan px_ratio seperti di bawah ini:
px rasio = rasio pixel fisik ke css px.
jika ada yang memperbesar Halaman, viewport pxes (px berbeda dari pixel) berkurang dan harus sesuai dengan layar sehingga rasio (pixel fisik / CSS_px) harus menjadi lebih besar.
tetapi di window Resizing, ukuran layar berkurang dan juga pxes. jadi rasio akan dipertahankan.
zooming: memicu windows.resize event -> dan ubah px_ratio
tapi
mengubah ukuran: memicu windows.resize acara -> tidak mengubah px_ratio
Poin kuncinya adalah perbedaan antara CSS PX dan Physical Pixel.
https://gist.github.com/abilogos/66aba96bb0fb27ab3ed4a13245817d1e
sumber
Ini bekerja untuk saya:
Itu hanya diperlukan di IE8. Semua browser lain secara alami menghasilkan acara pengubahan ukuran.
sumber
Ada plugin bagus yang dibangun dari
yonran
yang dapat melakukan deteksi. Ini pertanyaannya yang sebelumnya dijawab di StackOverflow. Ini berfungsi untuk sebagian besar browser. Aplikasi sesederhana ini:Demo
sumber
Always enable zoom
tombol di opsi Aksesibilitas. Demo tidak akan bereaksi terhadap perubahan.Saya ingin menyarankan peningkatan solusi sebelumnya dengan melacak perubahan lebar jendela. Alih-alih mempertahankan susunan acara pendengar Anda sendiri, Anda dapat menggunakan sistem acara javascript yang ada dan memicu acara Anda sendiri pada perubahan lebar, dan mengikat pengatur acara untuk itu.
Throttle / debounce dapat membantu mengurangi tingkat panggilan handler Anda.
sumber
Anda juga bisa mendapatkan peristiwa pengubahan ukuran teks, dan faktor zoom dengan menyuntikkan div yang berisi setidaknya ruang yang tidak dapat dipecahkan (mungkin, disembunyikan), dan secara teratur memeriksa ketinggiannya. Jika tinggi berubah, ukuran teks telah berubah, (dan Anda tahu berapa banyak - ini juga menyala, secara kebetulan, jika jendela diperbesar dalam mode halaman penuh, dan Anda masih akan mendapatkan faktor zoom yang benar, dengan tinggi yang sama / rasio tinggi).
sumber
sumber
Di iOS 10 dimungkinkan untuk menambahkan pendengar acara ke
touchmove
acara dan untuk mendeteksi, jika halaman diperbesar dengan acara saat ini.sumber
Meskipun ini adalah pertanyaan lama 9 tahun, masalahnya tetap ada!
Saya telah mendeteksi ukuran sementara mengecualikan zoom dalam suatu proyek, jadi saya mengedit kode saya untuk membuatnya berfungsi untuk mendeteksi ukuran dan zoom eksklusif satu sama lain. Ini berfungsi sebagian besar waktu, jadi jika sebagian besar cukup baik untuk proyek Anda, maka ini akan sangat membantu! Ini mendeteksi zoom 100% dari waktu dalam apa yang telah saya uji sejauh ini. Satu-satunya masalah adalah bahwa jika pengguna menjadi gila (mis. Mengubah ukuran jendela secara spastik) atau jeda jendela, ia mungkin menyala sebagai zoom alih-alih ukuran jendela.
Ini bekerja dengan mendeteksi perubahan dalam
window.outerWidth
atauwindow.outerHeight
sebagai pengubahan ukuran jendela saat mendeteksi perubahan dalamwindow.innerWidth
atauwindow.innerHeight
independen dari pengubahan ukuran jendela sebagai pembesaran.Catatan: Solusi saya seperti milik KajMagnus, tetapi ini telah bekerja lebih baik untuk saya.
sumber
0.05
tanpa setidaknya memberikan penjelasan yang baik. ;-) Misalnya, saya tahu bahwa di Chrome, khususnya, 10% adalah jumlah terkecil yang akan diperbesar peramban dalam kasus apa pun, tetapi tidak jelas bahwa ini berlaku untuk peramban lain. fyi, selalu pastikan kode Anda diuji, dan bersiaplah untuk mempertahankan atau memperbaikinya.Ini solusi bersih:
sumber
Acara pengubahan ukuran bekerja pada browser modern dengan melampirkan acara tersebut di
window
, dan kemudian membaca nilai-nilai daribody
, atau elemen lain dengan misalnya ( .getBoundingClientRect () ).Alternatif lain : API ResizeObserver
Tergantung tata letak Anda, Anda dapat menonton untuk mengubah ukuran pada elemen tertentu.
Ini berfungsi dengan baik pada tata letak «responsif», karena kotak kontainer diubah ukurannya saat zooming.
Berhati-hatilah untuk tidak membebani tugas javascript dari acara gerakan pengguna. Gunakan requestAnimationFrame kapan pun Anda perlu menggambar ulang.
sumber
Menurut MDN, "matchMedia" adalah cara yang tepat untuk melakukan ini https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Monitoring_screen_resolution_or_zoom_level_changes
ini agak rewel karena setiap instance hanya dapat menonton satu MQ pada satu waktu, jadi jika Anda tertarik pada perubahan level zoom apa pun, Anda perlu membuat banyak pencocokan .. tetapi karena browser bertugas untuk memancarkan peristiwa, mungkin masih lebih berkinerja daripada jajak pendapat, dan Anda bisa mencekik atau melonggarkan panggilan balik atau menyematkannya ke bingkai animasi atau sesuatu - inilah implementasi yang tampaknya cukup tajam, jangan ragu untuk menukar di _throttle atau apa pun jika Anda sudah bergantung pada itu.
Jalankan cuplikan kode dan perbesar dan perkecil di peramban Anda, catat nilai yang diperbarui di markup - Saya hanya menguji ini di Firefox! biar tahu jika Anda melihat masalah.
sumber
Saya membalas tautan berusia 3 tahun tetapi saya kira inilah jawaban yang lebih dapat diterima,
Buat file .css sebagai,
MISALNYA:-
Kode di atas membuat ukuran font '10px' ketika layar diperbesar menjadi sekitar 125%. Anda dapat memeriksa tingkat zoom yang berbeda dengan mengubah nilai '1000px'.
sumber
max-width
rasio zoom dan?