Apakah mungkin untuk memeriksa overflow:auto
div?
Sebagai contoh:
HTML
<div id="my_div" style="width: 100px; height:100px; overflow:auto;" class="my_class">
* content
</div>
JQUERY
$('.my_class').live('hover', function (event)
{
if (event.type == 'mouseenter')
{
if( ... if scrollbar visible ? ... )
{
alert('true'):
}
else
{
alert('false'):
}
}
});
Terkadang isinya singkat (tidak ada scrollbar) dan terkadang panjang (scrollbar terlihat).
> this.innerHeight();
jsfiddle.net/p3FFL/210Mungkin solusi yang lebih sederhana.
sumber
.ready()
Anda dapat melakukan ini menggunakan kombinasi atribut
Element.scrollHeight
danElement.clientHeight
.Menurut MDN:
Dan:
Oleh karena itu, elemen akan menampilkan bilah gulir jika ketinggian gulir lebih besar dari tinggi klien, jadi jawaban untuk pertanyaan Anda adalah:
sumber
Saya harus mengubah sedikit dari apa yang dikatakan Reigel:
innerHeight menghitung tinggi kontrol dan bantalan atas dan bawahnya
sumber
Ini berkembang pada jawaban @ Reigel. Ini akan mengembalikan jawaban untuk scrollbar horizontal atau vertikal.
Contoh:
sumber
Anda membutuhkan element.scrollHeight . Bandingkan dengan
$(element).height()
.sumber
Saya membuat kustom baru: pemilih semu untuk jQuery untuk menguji apakah suatu item memiliki salah satu properti css berikut:
Saya ingin menemukan orangtua terdekat yang dapat digulir dari elemen lain jadi saya juga menulis plugin jQuery kecil lain untuk menemukan orangtua terdekat dengan overflow.
Solusi ini mungkin tidak melakukan yang terbaik, tetapi tampaknya berhasil. Saya menggunakannya bersamaan dengan plugin $ .scrollTo. Terkadang saya perlu tahu apakah suatu elemen ada di dalam wadah yang dapat digulir. Dalam hal ini saya ingin menggulir elemen digulir induk vs jendela.
Saya mungkin harus membungkus ini dalam satu plugin dan menambahkan pemilih psuedo sebagai bagian dari plugin, serta memaparkan metode 'terdekat' untuk menemukan wadah digulir terdekat (induk).
Siapa pun .... ini dia.
Plugin jQuery $ .isScrollable:
$ (': scrollable') jQuery selektor semu:
Plugin jQuery $ .scrollableparent ():
Implementasinya cukup sederhana
UPDATE: Saya menemukan bahwa Robert Koritnik sudah datang dengan yang lebih kuat: pemilih pseudo yang dapat digulir yang akan mengidentifikasi kapak yang dapat digulir dan ketinggian wadah yang dapat digulir, sebagai bagian dari plugin jQuery $ .scrollintoview () nya. plugin scrollintoview
Inilah pemilih (alat peraga) mewahnya:
sumber
Solusi pertama di atas hanya berfungsi di IE Solusi kedua di atas hanya berfungsi di FF
Kombinasi kedua fungsi ini bekerja di kedua browser:
HTH
sumber
(scrollWidth / Tinggi - clientWidth / Tinggi) adalah indikator yang baik untuk keberadaan scrollbar, tetapi itu akan memberi Anda jawaban "false positive" pada banyak kesempatan. jika Anda perlu akurat saya sarankan menggunakan fungsi berikut. alih-alih mencoba menebak jika elemen tersebut dapat digulir - Anda dapat menggulirnya ...
sumber
Ugh semua orang menjawab di sini tidak lengkap, dan mari kita berhenti menggunakan jquery dalam jawaban SO sudah tolong. Periksa dokumentasi jquery jika Anda ingin info tentang jquery.
Inilah fungsi javascript murni umum untuk menguji apakah suatu elemen memiliki bilah gulir secara lengkap atau tidak:
sumber
Saya akan memperluas ini lebih jauh lagi untuk jiwa-jiwa miskin yang, seperti saya, menggunakan salah satu kerangka js modern dan bukan JQuery dan telah sepenuhnya ditinggalkan oleh orang-orang di utas ini:
ini ditulis dalam Angular 6 tetapi jika Anda menulis React 16, Vue 2, Polymer, Ionic, React-Native, Anda akan tahu apa yang harus dilakukan untuk mengadaptasinya. Dan itu adalah seluruh komponen sehingga harus mudah.
di html akan ada div dengan kelas "elem-list" yang bergaya dalam css atau scss untuk memiliki
height
danoverflow
nilai yang tidakhidden
. (jadiauto
atausroll
)Saya memicu evaluasi ini pada acara gulir karena tujuan akhir saya adalah untuk memiliki "gulir fokus otomatis" yang memutuskan apakah mereka menggulir seluruh rangkaian komponen secara horizontal jika komponen tersebut tidak memiliki gulir vertikal yang tersedia dan sebaliknya hanya menggulirkan jeroan salah satu komponen secara vertikal.
tetapi Anda dapat menempatkan eval di tempat lain agar dipicu oleh sesuatu yang lain.
yang penting untuk diingat di sini, adalah Anda tidak pernah Terpaksa kembali menggunakan JQuery, selalu ada cara untuk mengakses fungsi yang sama tanpa menggunakannya.
sumber
this
pertahankan cakupan induknya;th = this;
tidak perlu.function(){}.bind(this)
Berikut adalah versi jawaban Evan yang disempurnakan yang tampaknya menjelaskan dengan tepat logika overflow.
sumber
Solusi yang diberikan di atas akan bekerja dalam kebanyakan kasus, tetapi memeriksa scrollHeight dan overflow kadang-kadang tidak cukup dan dapat gagal untuk elemen tubuh dan html seperti yang terlihat di sini: https://codepen.io/anon/pen/EvzXZw
1. Solusi - Periksa apakah elemen dapat digulir:
Catatan: elemen dengan
overflow: hidden
juga diperlakukan sebagai digulir ( info lebih lanjut ), jadi Anda dapat menambahkan kondisi terhadap itu juga jika diperlukan:Sejauh yang saya tahu metode ini hanya gagal jika elemen memiliki
scroll-behavior: smooth
.Penjelasan: Caranya adalah, bahwa upaya menggulir ke bawah dan mengembalikannya tidak akan diberikan oleh browser. Fungsi paling atas juga dapat ditulis seperti berikut:
Tampilkan cuplikan kode
2. Solusi - Lakukan semua pemeriksaan yang diperlukan:
sumber
Inilah peningkatan saya: tambah parseInt. untuk beberapa alasan aneh itu tidak berhasil tanpanya.
sumber
Bekerja di Chrome , Edge , Firefox dan Opera , setidaknya di versi yang lebih baru.
Menggunakan JQuery ...
Atur fungsi ini untuk memperbaiki catatan kaki:
Ini mengembalikan fungsi. Dibuat dengan cara ini hanya untuk mengatur tubuh dan footer satu kali.
Dan kemudian, atur ini ketika dokumen sudah siap.
Tambahkan ini ke footer css Anda:
sumber
Sebagian besar jawaban yang diberikan membuat saya dekat dengan tempat yang saya butuhkan, tetapi tidak cukup di sana.
Kami pada dasarnya ingin menilai apakah bilah gulir - akan terlihat dalam situasi normal, dengan definisi yang berarti bahwa ukuran elemen tubuh lebih besar daripada port tampilan. Ini bukan solusi yang disajikan, itulah sebabnya saya mengirimkannya.
Semoga ini membantu seseorang!
Pada dasarnya, kami memiliki
hasScrollbar
fungsi, tetapi kembali jika elemen yang diminta lebih besar dari port tampilan. Untuk melihat ukuran port, kami baru saja menggunakan$(window).height()
. Perbandingan cepat terhadap ukuran elemen, menghasilkan hasil yang benar dan perilaku yang diinginkan.sumber
Temukan induk elemen saat ini yang memiliki pengguliran atau badan vertikal.
Ini dapat digunakan untuk autoscroll ke elemen saat ini melalui:
sumber
Pendekatan Tanpa Kerangka JavaScript, memeriksa vertikal dan horizontal
Gunakan seperti ini
sumber