Saya hanya ingin beberapa JQ / JS sederhana untuk memeriksa apakah halaman / jendela saat ini (bukan elemen tertentu) memiliki scrollbar vertikal.
Googling memberi saya hal-hal yang tampaknya terlalu rumit hanya untuk fitur dasar ini.
Bagaimana ini bisa dilakukan?
javascript
jquery
scroll
Woody
sumber
sumber
overflow
properti daribody
disetel kehidden
suatu tempat di sepanjang garis, itu tidak akan berfungsi. Pengaturan tersembunyi pada tubuh sangat jarang.$(document)
alih-alih$("body")
, ini berfungsi untuk saya ketika tubuh tidak (saya memiliki wadah yang diposisikan absolut dengan rasio aspek lebar / tinggi)coba ini:
Namun, ini hanya akan memberi tahu Anda jika scrollHeight vertikal lebih besar dari tinggi konten yang dapat dilihat. The
hasVScroll
variabel akan berisi benar atau salah.Jika Anda perlu melakukan pemeriksaan yang lebih menyeluruh, tambahkan yang berikut ini ke kode di atas:
sumber
cStyle.overflow === 'scroll'
?cStyle.overflow == "visible"
dapat menampilkan bilah gulir jika elemennya adalahdocument.body
. Tetapi harus (hasVScroll && cStyle.overflow == "visible" && element.nodeName == "BODY"). Selain itu, perlu diperiksacStyle.overflow === 'scroll'
seperti yang Anda tunjukkan.Saya mencoba jawaban sebelumnya dan tampaknya tidak berhasil, $ ("body"). Height () tidak selalu mewakili tinggi html secara keseluruhan.
Saya telah mengoreksi solusinya sebagai berikut:
sumber
Mari kita kembalikan pertanyaan ini dari kematian;) Ada alasan mengapa Google tidak memberi Anda solusi sederhana. Kasus khusus dan kebiasaan browser memengaruhi penghitungan, dan ini tidak semudah yang terlihat.
Sayangnya, sejauh ini ada masalah dengan solusi yang diuraikan di sini. Saya tidak bermaksud untuk meremehkan mereka sama sekali - mereka adalah titik awal yang bagus dan menyentuh semua properti utama yang diperlukan untuk pendekatan yang lebih kuat. Tetapi saya tidak akan merekomendasikan untuk menyalin dan menempelkan kode dari jawaban lain karena
$( document ).width()
dan.height()
menjadi mangsa deteksi buggy jQuery tentang ukuran dokumen .window.innerWidth
, jika browser mendukungnya, membuat kode Anda gagal mendeteksi bilah gulir di peramban seluler, yang umumnya lebar bilah gulir 0. Mereka hanya ditampilkan sementara sebagai hamparan dan tidak memakan ruang di dokumen . Melakukan zoom pada ponsel juga menjadi masalah (cerita panjang).html
danbody
ke nilai non-default (yang terjadi kemudian adalah sedikit terlibat - lihat deskripsi ini ).Saya telah menghabiskan lebih banyak waktu daripada yang saya bayangkan untuk menemukan solusi yang "langsung bekerja" (batuk). Algoritma yang saya buat sekarang menjadi bagian dari plugin, jQuery.isInView , yang mengekspos sebuah
.hasScrollbar
metode . Lihat sumbernya jika Anda mau.Dalam skenario di mana Anda memiliki kendali penuh atas halaman dan tidak harus berurusan dengan CSS yang tidak dikenal, menggunakan plugin mungkin berlebihan - lagipula, Anda tahu kasus edge mana yang berlaku, dan mana yang tidak. Namun, jika Anda memerlukan hasil yang andal di lingkungan yang tidak diketahui, saya rasa solusi yang diuraikan di sini tidak akan cukup. Anda lebih baik menggunakan plugin yang telah teruji - milik saya atau orang lain.
sumber
window.scrollbars
objek yang memiliki satu properti ,visible
. Kedengarannya menjanjikan tetapi tidak. Itu tidak didukung di IE, termasuk IE11. Dan itu hanya memberitahu Anda bahwa ada sebuah scroll bar - tetapi tidak yang mana. Lihat halaman pengujian di sini .Yang ini berhasil untuk saya:
Untuk bodi, pakai saja
hasVerticalScroll()
.sumber
clientHeight
lebih disukai dioffsetHeight
sini. Jika tidak, Anda dapat memiliki batas tebal, dan mengembalikan tidak ada bilah gulir saat ada.sumber
Anehnya, tidak ada solusi ini yang memberi tahu Anda jika halaman memiliki scrollbar vertikal.
window.innerWidth - document.body.clientWidth
akan memberi Anda lebar scrollbar. Ini harus bekerja di IE9 + apa pun (tidak diuji di browser yang lebih rendah). (Atau untuk menjawab pertanyaan dengan tegas,!!(window.innerWidth - document.body.clientWidth)
Mengapa? Misalkan Anda memiliki halaman di mana konten lebih tinggi dari tinggi jendela dan pengguna dapat menggulir ke atas / bawah. Jika Anda menggunakan Chrome di Mac tanpa tetikus yang terpasang, pengguna tidak akan melihat bilah gulir. Colokkan mouse dan scrollbar akan muncul. (Perhatikan perilaku ini dapat diganti, tapi itulah AFAIK default).
sumber
Saya menemukan solusi vanila
sumber
window.innerWidth > document.documentElement.clientWidth
itu benar, tetapiwindow.innerHeight > document.documentElement.clientHeight
tidak. Sepertinya yang terjadi dalam kasus ini adalah sebaliknya. Saya bukan pengembang JS, saya hanya membutuhkannya untuk tes Selenium. Saya berterima kasih atas petunjuk.Yang ini akan memberi tahu Anda apakah Anda memiliki scrollbar atau tidak. Saya telah menyertakan beberapa informasi yang dapat membantu debugging, yang akan ditampilkan sebagai peringatan JavaScript.
Letakkan ini di tag skrip, setelah tag body penutup.
sumber
Saya menulis versi terbaru dari jawaban Kees C.Bakker:
Fungsi mengembalikan true atau false tergantung apakah halaman memiliki scrollbar vertikal atau tidak.
Sebagai contoh:
sumber
saya menggunakan
sumber
Cukup bandingkan lebar elemen root dokumen (yaitu elemen html) dengan bagian dalam jendela:
Jika Anda juga perlu mengetahui lebar scrollbar:
sumber
Solusi lain tidak berfungsi di salah satu proyek saya dan saya akhirnya memeriksa properti overflow css
tetapi hanya akan berfungsi jika scrollbar muncul menghilang dengan mengubah prop itu tidak akan berfungsi jika konten sama atau lebih kecil dari jendela.
sumber