检查元素是否有滚动条的最快方法是什么?
当然有一件事是检查元素是否大于其视口(viewport),这可以通过检查这两个值轻松完成:
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
维度中减去边框以获得元素的实际可滚动视口(viewport)并将其与 scroll
维度进行比较。
供将来引用
:scrollable
jQuery 选择器过滤器包含在我的 .scrollintoview()
jQuery 插件中。完整代码可以在我的blog post中找到如果有人需要它。即使它没有提供实际的解决方案,Soumya 的代码也极大地帮助我解决了问题。它为我指明了正确的方向。
最佳答案
几周前我在某个地方发现了这个。它对我有用。
var div = document.getElementById('container_div_id');
var hasHorizontalScrollbar = div.scrollWidth > div.clientWidth;
var hasVerticalScrollbar = div.scrollHeight > div.clientHeight;
/* you'll get true/false */
关于javascript - 检查 HTML 元素是否有滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4880381/