如何使用纯JS获取元素bounding box
的大小?
并且bounding box
我的意思是如果我包围该元素中的所有可见元素将创建的正方形的大小。
offsetWidth
/ offsetHeight
和scrollWidth
/ scrollHeight
不会这样做,因为该广场的大小取决于元素的overflow
值他们没有。
有和没有overflow:hidden
的示例:
var first = document.getElementsByClassName('first')[0];
var second = document.getElementsByClassName('second')[0];
console.log(first.offsetHeight)
console.log(first.scrollHeight)
console.log(first.getBoundingClientRect())
console.log(second.offsetHeight)
console.log(second.scrollHeight)
console.log(second.getBoundingClientRect())

.out {
outline: 1px solid red;
}
.in {
position: relative;
width: 50px;
height: 50px;
background: red;
top: 150px;
}
.second {
overflow: hidden;
outline: 1px solid blue;
}

<div class="first out">
<div class="in">
</div>
</div>
<div class="second out">
<div class="in">
</div>
</div>
&#13;
.in
元素中的 .first
是可见的,因此.first
边界框高度应包含它(它应该是200,实际上是scrollHeight
)。
但是,.in
元素中的.second
是不可见的,因此.second
边界框高度不应包含它(它应该是50,实际上是{{1} }})
因此,offsetHeight
和offsetHeight
都不能为您提供scrollHeight
高度,除非您知道该元素的bounding box
值。