我使用react js,我尝试使用getBoundingClientRect(). top获取dom元素值。我使用useEffect,并在其中添加window.scrollY到getBoundingClientRect().top中,以便始终获得相同的值。但它返回错误的值。我试着只记录getBoundingClientRect().top,它给了我一个像155或类似的值,但正确的值是2408。代码:
useEffect(() => {
console.log(containerRef.current.getBoundingClientRect().top);
}, []);
<div className="experience-containter">
<div ref={containerRef} className="image-container-1">
<div>
<img src={image1} alt="" />
</div>
</div>
</div>
.experience-containter {
position: relative;
.image-container-1 {
width: 250px;
height: 250px;
border-radius: 50%;
position: absolute;
right: 15%;
overflow: hidden;
div {
display: flex;
justify-content: center;
align-items: center;
}
img {
width: 140%;
object-fit: cover;
}
}
}
字符串
正如你所看到的,我正在使用ref,并试图获取containerRef.current.getBoundingClientRect().top的值。请帮帮忙
4条答案
按热度按时间oyt4ldly1#
getBoundingClientRect()返回相对于窗口(视图端口)的值,所以如果你想无论用户如何上下滚动都能准确地得到位置,你最好得到getBoundingClientRect()的值加上文档坐标。
例如使用下面的函数
字符串
有关详细信息,请参阅此处的完整文档https://javascript.info/coordinates
gab6jxml2#
我不认为使用
getBoundingClientRect().top
是滚动到元素的正确方法。getBoundingClientRect()
函数返回相对于窗口的边界框,而不是整个网页,因此它可能无法给予元素的正确位置。您可以尝试使用
containerRef.current.scrollIntoView()
滚动元素以查看。如果你想得到偏移值,你可以尝试containerRef.current.offsetTop + window.scrollY
wxclj1h53#
对于那些从Google来到这里的人:
对我来说,
getBoundingClientRect()
和来自window
或document
的偏移量值的组合不起作用,我必须使用来自html元素本身的偏移量:字符串
dwbf0jvd4#
字符串