Bagaimana cara menggunakan jQuery untuk menentukan ukuran viewport browser, dan untuk mengaktifkan kembali ini jika halaman diubah ukurannya? Saya perlu membuat ukuran IFRAME ke dalam ruang ini (datang sedikit di setiap margin).
Bagi mereka yang tidak tahu, viewport browser bukan ukuran dokumen / halaman. Ini adalah ukuran jendela Anda yang terlihat sebelum gulir.
Jawaban:
Untuk mendapatkan lebar dan tinggi viewport:
mengubah ukuran acara halaman:
sumber
innerWidth
/innerHeight
lebih tepat digunakan (mencakup zooming).DOCTYPE
deklarasi yang tepat , mis<!DOCTYPE html>
.Anda dapat mencoba unit viewport (CSS3):
Dukungan browser
sumber
1. Respon terhadap pertanyaan utama
Script
$(window).height()
berfungsi dengan baik (menunjukkan ketinggian viewport dan bukan dokumen dengan tinggi gulir), TETAPI perlu Anda menempatkan tag doctype dengan benar dalam dokumen Anda, misalnya doctypes ini:Untuk HTML 5:
<!DOCTYPE html>
Untuk HTML4 transisi:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Mungkin doctype default yang diasumsikan oleh beberapa browser adalah seperti itu, yang
$(window).height()
mengambil tinggi dokumen dan bukan tinggi browser. Dengan spesifikasi DOCTYPE, itu diselesaikan dengan memuaskan, dan saya cukup yakin kalian akan menghindari "mengubah scroll-overflow menjadi tersembunyi dan kemudian kembali", yang, maaf, trik yang sedikit kotor, khususnya jika Anda tidak t mendokumentasikannya pada kode untuk penggunaan programmer masa depan.2. Kiat TAMBAHAN, singkirkan: Selain itu, jika Anda membuat skrip, Anda dapat membuat tes untuk membantu programmer dalam menggunakan pustaka Anda, izinkan saya membuat pasangan:
$ (dokumen) .ready (function () {});EDIT: tentang bagian 2, "Kiat TAMBAHAN, singkirkan catatan": @Machiel, dalam komentar kemarin (2014-09-04), BENAR-BENAR benar: cek $ tidak dapat berada dalam acara siap Jquery, karena kita, seperti yang dia tunjukkan, dengan asumsi $ sudah didefinisikan. TERIMA KASIH UNTUK MENITIKKAN BAHWA KELUAR, dan tolong pembaca lainnya memperbaikinya, jika Anda menggunakannya dalam skrip Anda. Saran saya adalah: di perpustakaan Anda letakkan fungsi "install_script ()" yang menginisialisasi perpustakaan (masukkan referensi ke $ di dalam fungsi init tersebut, termasuk deklarasi ready ()) dan DI AWAL fungsi "install_script ()" tersebut , periksa apakah $ didefinisikan, tetapi jadikan semuanya independen dari JQuery, sehingga pustaka Anda dapat "mendiagnosis dirinya sendiri" ketika JQuery belum didefinisikan. Saya lebih suka metode ini daripada memaksa penciptaan otomatis JQuery membawanya dari CDN. Itu adalah catatan kecil disamping untuk membantu programmer lain. Saya pikir orang yang membuat perpustakaan harus lebih kaya dalam umpan balik terhadap kesalahan programmer potensial. Misalnya, Google Apis memerlukan manual samping untuk memahami pesan kesalahan. Itu tidak masuk akal, membutuhkan dokumentasi eksternal untuk beberapa kesalahan kecil yang tidak mengharuskan Anda untuk pergi dan mencari manual atau spesifikasi. Perpustakaan harus DOKUMEN DIRI. Saya menulis kode bahkan menangani kesalahan yang mungkin saya lakukan bahkan enam bulan dari sekarang, dan itu masih mencoba untuk menjadi kode yang bersih dan tidak berulang, sudah ditulis untuk mencegah-masa depan-kesalahan pengembang. Saya pikir orang yang membuat perpustakaan harus lebih kaya dalam umpan balik terhadap kesalahan programmer potensial. Misalnya, Google Apis memerlukan manual samping untuk memahami pesan kesalahan. Itu tidak masuk akal, membutuhkan dokumentasi eksternal untuk beberapa kesalahan kecil yang tidak mengharuskan Anda untuk pergi dan mencari manual atau spesifikasi. Perpustakaan harus DOKUMEN DIRI. Saya menulis kode bahkan menangani kesalahan yang mungkin saya lakukan bahkan enam bulan dari sekarang, dan itu masih mencoba untuk menjadi kode yang bersih dan tidak berulang, sudah ditulis untuk mencegah-masa depan-kesalahan pengembang. Saya pikir orang yang membuat perpustakaan harus lebih kaya dalam umpan balik terhadap kesalahan programmer potensial. Misalnya, Google Apis memerlukan manual samping untuk memahami pesan kesalahan. Itu tidak masuk akal, membutuhkan dokumentasi eksternal untuk beberapa kesalahan kecil yang tidak mengharuskan Anda untuk pergi dan mencari manual atau spesifikasi. Perpustakaan harus DOKUMEN DIRI. Saya menulis kode bahkan menangani kesalahan yang mungkin saya lakukan bahkan enam bulan dari sekarang, dan itu masih mencoba untuk menjadi kode yang bersih dan tidak berulang, sudah ditulis untuk mencegah-masa depan-kesalahan pengembang. Anda tidak perlu pergi dan mencari manual atau spesifikasi. Perpustakaan harus DOKUMEN DIRI. Saya menulis kode bahkan menangani kesalahan yang mungkin saya lakukan bahkan enam bulan dari sekarang, dan itu masih mencoba untuk menjadi kode yang bersih dan tidak berulang, sudah ditulis untuk mencegah-masa depan-kesalahan pengembang. Anda tidak perlu pergi dan mencari manual atau spesifikasi. Perpustakaan harus DOKUMEN DIRI. Saya menulis kode bahkan menangani kesalahan yang mungkin saya lakukan bahkan enam bulan dari sekarang, dan itu masih mencoba untuk menjadi kode yang bersih dan tidak berulang, sudah ditulis untuk mencegah-masa depan-kesalahan pengembang.
sumber
$
setelah Anda sudah menggunakan$
untuk menelepon$(document).ready(function() { } );
. Baik jika Anda memeriksa apakah jQuery tersedia, tetapi pada saat ini sudah terlambat.Anda dapat menggunakan $ (window) .resize () untuk mendeteksi jika viewport diubah ukurannya.
jQuery tidak memiliki fungsi untuk secara konsisten mendeteksi lebar dan tinggi viewport yang benar [1] ketika ada bilah gulir.
Saya menemukan solusi yang menggunakan perpustakaan Modernizr dan secara khusus fungsi mq yang membuka kueri media untuk javascript.
Ini solusinya:
Jawaban saya mungkin tidak akan membantu mengubah ukuran iframe menjadi 100% lebar viewport dengan margin di setiap sisi, tapi saya harap itu akan memberikan penghiburan bagi pengembang web yang frustrasi dengan ketidakcocokan browser lebar javascript viewport dan perhitungan tinggi.
Mungkin ini bisa membantu sehubungan dengan iframe:
[1] Anda dapat menggunakan $ (window) .width () dan $ (window) .height () untuk mendapatkan nomor yang benar di beberapa browser, tetapi salah di yang lain. Di browser tersebut Anda dapat mencoba menggunakan window.innerWidth dan window.innerHeight untuk mendapatkan lebar dan tinggi yang benar, tetapi saya akan menyarankan metode ini karena akan bergantung pada agen pengguna sniffing.
Biasanya browser yang berbeda tidak konsisten tentang apakah mereka memasukkan scrollbar sebagai bagian dari lebar dan tinggi jendela.
Catatan: $ (window) .width () dan window.innerWidth bervariasi antara sistem operasi yang menggunakan browser yang sama. Lihat: https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238
sumber
sumber
Untuk mendapatkan ukuran viewport saat memuat dan menyesuaikan ukuran (berdasarkan respons SimaWB):
sumber
Harap dicatat bahwa unit viewport CSS3 (vh, vw) tidak akan berfungsi dengan baik di iOS Ketika Anda menggulir halaman, ukuran viewport entah bagaimana dihitung ulang dan ukuran elemen Anda yang menggunakan unit viewport juga meningkat. Jadi, sebenarnya beberapa javascript diperlukan.
sumber