Jaki jest najszybszy sposób sprawdzenia, czy element ma paski przewijania?
Jedną rzeczą jest oczywiście sprawdzenie, czy element jest większy niż jego rzutnia, co można łatwo zrobić, sprawdzając te dwie wartości:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
ale to nie znaczy, że ma również paski przewijania (więc ludzie mogą go przewijać).
Pytanie
Jak mogę sprawdzić, czy paski przewijania w 1 przekroju przeglądarce i 2 tylko javascript (jak w żadnym jQuery ) sposób?
Tylko JavaScript, ponieważ potrzebuję jak najmniejszego narzutu, ponieważ chciałbym napisać bardzo szybki filtr selektora jQuery
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
Przypuszczam, że musiałbym sprawdzić overflowustawienia stylu, ale jak to zrobić w różnych przeglądarkach?
Dodatkowa edycja
Nie tylko overflowustawienia stylu. Sprawdzenie, czy element ma pasek przewijania, nie jest tak banalne, jak się wydaje. Pierwsza formuła, którą napisałem powyżej, działa dobrze, gdy element nie ma obramowania, ale jeśli tak jest (zwłaszcza gdy obramowanie ma znaczną szerokość), offsetwymiar może być większy niż scrollwymiar, ale element nadal można przewijać. W rzeczywistości musimy odjąć granice od offsetwymiaru, aby uzyskać rzeczywisty przewijalny obszar wyświetlania elementu i porównać go z scrollwymiarem.
Dla przyszłego odniesienia
:scrollableFiltr selektora jQuery jest zawarty w mojej .scrollintoview()wtyczce jQuery. Pełny kod można znaleźć w moim wpisie na blogu, jeśli ktoś go potrzebuje. Mimo że nie zapewniło właściwego rozwiązania, kod Soumyi znacznie pomógł mi rozwiązać problem. Wskazał mi właściwy kierunek.
overflow:hiddensię na to postawi? Zawartość byłaby nadmiarowa, ale nadal nie można jej przewijać. Problem nie jest tak prosty, jak mogłoby się wydawać.