Какой самый быстрый способ проверить, есть ли у элемента полосы прокрутки?
Одна вещь, конечно же, - это проверить, больше ли элемент, чем его область просмотра, что можно легко сделать, проверив эти два значения:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
но это не значит, что у него также есть полосы прокрутки (так что люди могут его прокручивать).
Вопрос
Как я могу проверить для скроллинга в 1 кросс - браузер и 2 Javascript только (как не JQuery ) способом?
Только Javascript, потому что мне нужно как можно меньше накладных расходов, потому что я хотел бы написать очень быстрый фильтр селектора jQuery
// check for specific scrollbars
$(":scrollable(x/y/both)")
// check for ANY scrollbar
$(":scrollable")
Полагаю, мне придется проверить overflow
настройки стиля, но как мне это сделать в кросс-браузере?
Дополнительное редактирование
Не только overflow
настройки стиля. Проверить, есть ли у элемента полоса прокрутки, не так тривиально, как кажется. Первая формула, которую я написал выше, отлично работает, когда элемент не имеет границы, но когда она есть (особенно когда граница имеет значительную ширину), offset
размер может быть больше scroll
размера, но элемент все еще можно прокручивать. На самом деле нам нужно вычесть границы из offset
измерения, чтобы получить фактическое прокручиваемое окно просмотра элемента и сравнить его с scroll
размером.
Для дальнейшего использования
:scrollable
Фильтр селектора jQuery включен в мой .scrollintoview()
плагин jQuery. Полный код можно найти в моем блоге, если он кому-нибудь понадобится. Несмотря на то, что он не предлагал фактического решения, код Soumya значительно помог мне решить проблему. Это указывало мне в правильном направлении.
overflow:hidden
на нем установился? Был бы лишний контент, но он все равно не прокручивается. Проблема далеко не так проста, как может показаться.