Saya ingin memberikan pengunjung saya kemampuan untuk melihat gambar dalam kualitas tinggi, apakah ada cara saya dapat mendeteksi ukuran jendela?
Atau lebih baik lagi, ukuran viewport browser dengan JavaScript? Lihat area hijau di sini:
javascript
cross-browser
viewport
Alix Axel
sumber
sumber
getComputedStyle
melakukanhtml
tag yang diperluas .Jawaban:
Peramban silang
@media (width)
dan@media (height)
nilaiwindow.innerWidth
dan.innerHeight
@media (width)
dan@media (height)
yang termasuk scrollbarinitial-scale
dan variasi pembesaran dapat menyebabkan nilai seluler turun secara salah ke apa yang disebut PPK viewport visual dan lebih kecil dari@media
nilaiundefined
di IE8-document.documentElement.clientWidth
dan.clientHeight
@media (width)
dan@media (height)
ketika tidak ada scrollbarjQuery(window).width()
yang jQuery memanggil browser viewportSumber daya
matchMedia
untuk mendapatkan dimensi yang tepat di unit apa punsumber
$
denganverge
. Jika Anda ingin mengintegrasikan ke dalam jQuery maka lakukanjQuery.extend(verge)
. Lihat: verge.airve.com/#static<!DOCTYPE html>
di bagian atas halaman agar kode berfungsi.document.documentElement.clientHeight
mengembalikan tinggi halaman , sementarawindow.innerHeight
mengembalikan tinggi viewport . Perbedaan besar.Fungsi dimensi jQuery
$(window).width()
dan$(window).height()
sumber
$(window).height();
mengembalikan 536, sedangkan$("html").height();
pengembalian 10599Anda bisa menggunakan properti window.innerWidth dan window.innerHeight .
sumber
document.documentElement.clientWidth
lebih akurat dan lebih banyak didukung daripadawindow.innerWidth
document.documentElement.clientWidth
beri saya lebar viewport sementara window.innerWidth memberi saya lebar dokumen. Ya, seperti itu.Jika Anda tidak menggunakan jQuery, itu menjadi jelek. Berikut cuplikan yang berfungsi pada semua browser baru. Perilaku ini berbeda dalam mode Quirks dan mode standar di IE. Ini merawatnya.
sumber
clientHeight
padadocument.documentElement
elemen, yang akan memberi Anda ukuran viewport. Untuk mendapatkan ukuran dokumen, Anda harus melakukannyadocument.body.clientHeight
. Seperti yang dijelaskan oleh Chetan, perilaku ini berlaku untuk browser modern. Mudah untuk diuji. Cukup buka konsol dan ketikdocument.documentElement.clientHeight
beberapa tab terbuka.Saya tahu ini memiliki jawaban yang dapat diterima, tetapi saya mengalami situasi di mana
clientWidth
tidak berfungsi, karena iPhone (setidaknya milik saya) mengembalikan 980, bukan 320, jadi saya menggunakanwindow.screen.width
. Saya sedang bekerja di situs yang ada, dibuat "responsif" dan perlu memaksa browser yang lebih besar untuk menggunakan meta-viewport yang berbeda.Semoga ini bisa membantu seseorang, ini mungkin tidak sempurna, tetapi berfungsi dalam pengujian saya pada iOs dan Android.
sumber
Saya melihat dan menemukan cara lintas browser:
sumber
Saya dapat menemukan jawaban pasti dalam JavaScript: The Definitive Guide, Edisi ke-6 oleh O'Reilly, hlm. 391:
Solusi ini berfungsi bahkan dalam mode Quirks, sedangkan solusi ryanve dan ScottEvernden saat ini tidak.
kecuali fakta bahwa saya bertanya-tanya mengapa garis
if (document.compatMode == "CSS1Compat")
tidakif (d.compatMode == "CSS1Compat")
, semuanya terlihat bagus.sumber
documentElement.clientWidth
tidak merespons perubahan orientasi perangkat di iOS. b) menampilkan jumlah piksel fisik (praktis tidak berguna), bukan piksel virtualJika Anda mencari solusi non-jQuery yang memberikan nilai yang benar dalam piksel virtual pada perangkat seluler , dan Anda pikir itu jelas
window.innerHeight
ataudocument.documentElement.clientHeight
dapat menyelesaikan masalah Anda, pelajari tautan ini terlebih dahulu: https://tripleodeon.com/assets/2011/12/ table.htmlPengembang telah melakukan pengujian yang baik yang mengungkapkan masalah: Anda bisa mendapatkan nilai yang tidak terduga untuk Android / iOS, lanskap / potret, tampilan normal / kepadatan tinggi.
Jawaban saya saat ini bukan peluru perak (// todo), melainkan peringatan bagi mereka yang akan dengan cepat menyalin-menempelkan solusi apa pun dari utas ini ke dalam kode produksi.
Saya mencari lebar halaman dalam piksel virtual di ponsel, dan saya menemukan satu-satunya kode yang berfungsi adalah (tanpa terduga!)
window.outerWidth
. Saya nanti akan memeriksa tabel ini untuk solusi yang benar memberikan ketinggian tidak termasuk bar navigasi, ketika saya punya waktu.sumber
Kode ini dari http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
NB: untuk membaca lebarnya, gunakan
console.log('viewport width'+viewport().width);
sumber
Ada perbedaan antara
window.innerHeight
dandocument.documentElement.clientHeight
. Yang pertama termasuk ketinggian scrollbar horisontal.sumber
Solusi yang sesuai dengan standar W3C adalah membuat div transparan (misalnya secara dinamis dengan JavaScript), atur lebar dan tingginya menjadi 100vw / 100vh (unit Viewport) lalu dapatkan offsetWidth dan offsetHeight. Setelah itu, elemen dapat dihapus kembali. Ini tidak akan berfungsi di browser lama karena unit viewport relatif baru, tetapi jika Anda tidak peduli tentang mereka tetapi tentang standar (yang akan datang) sebagai gantinya, Anda pasti bisa seperti ini:
Tentu saja, Anda juga dapat mengatur objNode.style.position = "diperbaiki" dan kemudian menggunakan 100% sebagai lebar / tinggi - ini harus memiliki efek yang sama dan meningkatkan kompatibilitas sampai batas tertentu. Juga, mengatur posisi untuk diperbaiki mungkin merupakan ide yang baik secara umum, karena jika tidak div akan tidak terlihat tetapi menghabiskan beberapa ruang, yang akan menyebabkan scrollbar muncul dll.
sumber
Ini adalah cara saya melakukannya, saya mencobanya di IE 8 -> 10, FF 35, Chrome 40, itu akan bekerja sangat lancar di semua browser modern (seperti window.innerWidth didefinisikan) dan di IE 8 (tanpa jendela. innerWidth) berfungsi dengan baik juga, masalah apa pun (seperti flashing karena overflow: "hidden"), tolong laporkan. Saya tidak terlalu tertarik pada ketinggian viewport karena saya membuat fungsi ini hanya untuk menyelesaikan beberapa alat responsif, tetapi mungkin dapat diimplementasikan. Semoga ini bisa membantu, saya menghargai komentar dan saran.
sumber