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ć overflow
ustawienia stylu, ale jak to zrobić w różnych przeglądarkach?
Dodatkowa edycja
Nie tylko overflow
ustawienia 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ść), offset
wymiar może być większy niż scroll
wymiar, ale element nadal można przewijać. W rzeczywistości musimy odjąć granice od offset
wymiaru, aby uzyskać rzeczywisty przewijalny obszar wyświetlania elementu i porównać go z scroll
wymiarem.
Dla przyszłego odniesienia
:scrollable
Filtr 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:hidden
się na to postawi? Zawartość byłaby nadmiarowa, ale nadal nie można jej przewijać. Problem nie jest tak prosty, jak mogłoby się wydawać.