javascript - 检查 HTML 元素是否有滚动条

标签 javascript dom scrollbar overflow

检查元素是否有滚动条的最快方法是什么?

当然有一件事是检查元素是否大于其视口(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/

相关文章:

javascript - 在下拉列表中选择值时隐藏文本字段

javascript - 引用引用 DOM 操作

javascript - 如何使椭圆垂直对齐?

c# - 用于绘制图形和滚动的面板

html - 滚动条调整页面大小

VB.NET VScrollBar,反向功能

javascript - jsTree:跳出编辑模式?

Javascript多个类每个函数获取选定的类名

javascript - 使用 jquery ajax 调用中的 html 更新多个元素

javascript - 将 gzip 与 GWT 集成