【发布时间】:2011-06-20 07:19:11
【问题描述】:
检查元素是否有滚动条最快的方法是什么?
一件事当然是检查元素是否大于其视口,这可以通过检查这两个值来轻松完成:
el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth
但这并不意味着它也有滚动条(因此它实际上可以由人类滚动)。
问题
如何在 1 跨浏览器和 2 javascript(如 no 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 插件中。如果有人需要,可以在我的blog post 中找到完整的代码。即使它没有提供实际的解决方案,Soumya 的代码也极大地帮助了我解决问题。它为我指明了正确的方向。
【问题讨论】:
标签: javascript dom scrollbar overflow