我有一个HTML代码,有一个大表。我需要滚动访问所有的行。
我做了thead
作为一个粘性标签。因为我到处都需要这个标签。(position: sticky; top: 0;
)
但是,当我想在JavaScript中使用firstCell.scrollIntoView();
时,firstCell
将被thead
覆盖!
您可以在this link中看到该示例
在本例中,Target
是表中的第一个cell
,单击该按钮必须滚动到Target
的视图中
但是Target
将位于thead
的背面
如何解决此问题?
3条答案
按热度按时间2izufjch1#
由于
thead
具有粘性位置,因此在计算可用空间时不会考虑其大小。解决方法是使用
scrollIntoView({ behavior: 'smooth', block: 'end' })
代替scrollIntoView()
。这仅仅是因为
thead
的高度等于tr
的高度,所以如果它将滚动条对齐到底部,它将不再被覆盖。os8fio9y2#
滚动到视图后,通过
getBoundingClientRect
s检查头部底部是否与目标顶部重叠,如果是,则通过差值调用window.scrollBy
。t2a7ltrp3#
我也遇到过同样的问题,但是我发现了一个带有CSS的article solving this issue。在我的例子中,这更容易实现和处理。
如果你把
scroll-margin-top
附加到一个标签上,当scrollIntoView()
被调用时,它会自动给那个元素添加边距。