ScrollIntoView() 导致整个页面移动

2022-08-30 01:43:18

我正在使用ScrollIntoView()将列表中突出显示的项目滚动到视图中。当我向下滚动时,ScrollIntoView(false)可以完美地工作。但是当我向上滚动时,ScrollIntoView(true)会导致整个页面移动一点,我认为这是有意的。有没有办法在使用ScrollIntoView(true)时避免整个页面移动?

这是我的页面结构 -

#listOfDivs {
  position:fixed;
  top:100px;
  width: 300px;
  height: 300px;
  overflow-y: scroll;
}

<div="container">
    <div="content"> 
         <div id="listOfDivs"> 
             <div id="item1"> </div>
             <div id="item2"> </div>
             <div id="itemn"> </div>
         </div>
    </div>
</div>

listOfDivs 来自 ajax 调用。使用移动野生动物园。


答案 1

通过以下方式修复它:

element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })

请参见: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView


答案 2

您可以使用代替 :scrollTopscrollIntoView()

var target = document.getElementById("target");
target.parentNode.scrollTop = target.offsetTop;

jsFiddle: http://jsfiddle.net/LEqjm/

如果要滚动多个可滚动元素,则需要根据干预元素的 s 分别更改每个元素的可滚动元素。这应该为您提供细粒度的控制,以避免您遇到的问题。scrollTopoffsetTop

编辑:offsetTop不一定相对于父元素 - 它是相对于第一个定位的祖先。如果父元素未定位(相对、绝对或固定),则可能需要将第二行更改为:

target.parentNode.scrollTop = target.offsetTop - target.parentNode.offsetTop;