Какой самый быстрый способ проверить, имеет ли элемент полосы прокрутки?
Конечно, проверяется, больше ли элемент, чем его видовой экран, что легко можно сделать, проверив эти два значения:
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 включен в мой плагин jQuery .scrollintoview()
. Полный код можно найти в моем сообщении в блоге, если кому-то это нужно. Несмотря на то, что это не обеспечило фактическое решение, код Soumya значительно помог мне решить проблему. Он указал мне в правильном направлении.