javascript - 如何确定 DOM 元素是否为滚动容器?
问题描述
有没有办法在不检查其样式的情况下找出 DOM 元素是否具有滚动功能?
目前,我正在寻找overflow: auto
或scroll
在元素上。我想知道一种 JavaScript 方法,它可以检查元素是否是深度嵌套子元素的滚动容器。
[编辑]
这不是要确定它是否显示了滚动条;我想知道它是否是一个容器,如果内容超出容器高度,它会显示滚动条。
根据我的经验,浏览器有时会自然而然地这样做,但我不知道为什么。这告诉我在 JS 中的容器上有一些东西说“当内容更大时我会显示滚动条”。
我在想它可能与height: 100%
andposition: absolute
有关系,但肯定还有其他情况。
奇怪的是,浏览器将这些元素显示为overflow: visible
来自用户代理样式表,但在这种情况下它不应该显示滚动条。
解决方案
You can compare the clientHeight of the element com the scroll height of it.
I made a function that makes it.
var myDiv = document.querySelector("#my_div_1");
var myDiv2 = document.querySelector("#my_div_2");
console.log("There's scroll in my_div 1 = " + hasScrollY(myDiv));
console.log("There's scroll in my_div 2 = " + hasScrollY(myDiv2));
function hasScrollY(elem) {
return elem.clientHeight < elem.scrollHeight;
}
#my_div_1 {
background-color: lightblue;
height: 50px;
overflow-y: scroll;
}
#my_div_2 {
background-color: lightgreen;
height: 60px;
overflow-y: scroll;
}
p {
height: 20px;
}
<div id="my_div_1">
<p>
This is a div with overflow
</p>
</div>
<br>
<div id="my_div_2">
<p>
This is a div without overflow
</p>
</div>
推荐阅读
- r - 如何使用 R 中的 Web 抓取功能提取 USGS 仪表信息
- android - 凌空和休息有什么关系
- r - 循环 rbind 以获取数据帧列表
- erlang - 在erlang中对每个索引的整数列表求和
- reactjs - 如何覆盖 React Material ui 1.2 TableSortLabel 中的 ArrowDownwardIcon 图标
- c# - 为什么xml反序列化中的某些属性总是返回null?
- markdown - Mkdocs 警告:404 GET require.js
- ruby-on-rails - 错误:无法构建 gem 原生扩展 (stock_quote gem)
- c# - 如何在listview c# windows应用程序中显示模型列表
- php - 未定义变量:bg footer.php 文件 - Realtor wordpress 主题