Javascript element.scrollTop始终返回0
我试图获取元素的scrollTop位置,但它总是返回0。我做错了什么?我该如何修复它Javascript element.scrollTop始终返回0,javascript,dom,Javascript,Dom,我试图获取元素的scrollTop位置,但它总是返回0。我做错了什么?我该如何修复它 var-inner=document.getElementById('inner'); addEventListener('scroll',function(){ console.log(内部.scrollTop); }) #外部{ 背景颜色:棕褐色; 高度:1000px; } #首先{ 背景色:深蓝色; 高度:200px; } #内在的{ 背景颜色:海蓝宝石; 高度:100px; } scrollTop
var-inner=document.getElementById('inner');
addEventListener('scroll',function(){
console.log(内部.scrollTop);
})
#外部{
背景颜色:棕褐色;
高度:1000px;
}
#首先{
背景色:深蓝色;
高度:200px;
}
#内在的{
背景颜色:海蓝宝石;
高度:100px;
}
scrollTop始终返回0
正如@FelixKling在评论中指出的那样:
internal.offsetTop
用于此操作。返回您在该特定容器中滚动的金额。因此,由于internal
没有滚动条,它从不滚动,因此scrollTop
为0
但是,另一方面,返回当前元素相对于offsetParent
节点顶部的距离
因此,基于窗口获取元素滚动量的公式为:
inner.offsetTop - document.body.scrollTop;
出于某种原因,从我的html和body标记中删除“height:100%”修复了这个问题
我希望这对其他人有帮助 我不知道为什么,但我唯一能做的就是使用窗口。pageYOffset
:
window.addEventListener('scroll', function() {
let scrollPosition = window.pageYOffset;
if (scrollPosition >= 30) {
headerContainer.classList.add('lg:bg-green-lightest');
} else {
headerContainer.classList.remove('lg:bg-green-lightest');
}
});
来自:“Element.scrollTop属性获取或设置元素内容向上滚动的像素数。元素的scrollTop是元素顶部到其最顶部可见内容的距离测量形式。当元素内容未生成垂直滚动条时,其scrollTop值默认为0。”由于internal
的内容不会生成滚动条,scrollTop
是0
。换句话说:scrollTop
不是您要查找的属性。@FelixKling噢。我明白了!谢谢那么,我如何基于窗口(或滚动元素)检查其滚动顶部呢?inner.offsetTop-window.scrollY
在这种情况下可以工作,但我不知道这是否是最好的方法。谢谢!我的页面上有一个内容容器div,上面有一个“height:100vh”,这是在我的页面上实现的。