我有一个固定标题的页面。在那个页面上,我有一个表,它的功能是,当点击一行时,页面会滚动到那个元素。每个表行都有一个与元素id相匹配的id。因此,点击后,我得到元素的id,然后执行这个函数
element.scrollIntoView({block: 'start', behavior: 'smooth'})
这种方法的问题是滚动太远,元素的某些部分隐藏在固定的标题下面。我看了很多关于堆栈溢出的解决方案,但没有一个对我有效。我希望滚动在元素顶部结束。
所以,我试着使用
element.scrollTo({top: element.offsetTop, behavior: 'smooth})
我做了一些计算,比如考虑填充/边距,并使其发挥作用。问题是不同设备上的offsetTop不同。上述逻辑不适用于手机和平板电脑。offsetTop是当前元素相对于offsetParent顶部的距离,该距离对于每个设备将不相同。
我知道scrollIntoView
将是我的最佳选择,但不确定如何防止元素在固定标题下滚动。感谢您的帮助。
我已经进行了一些测试和研究,也许这正是您所需要的。
const position = element.getBoundingClientRect().top + window.pageYOffset - header.clientHeight;
window.scrollTo({ top: position, behavior: 'smooth'});