如何使用jQuery将表的一行滚动到视图(element.scrollintoView)?

Fux*_*uxi 72 jquery scroll

我正在使用jQuery动态地向表中添加行.的table是内部的divoverflow:auto从而导致垂直滚动条.

我现在想要将我的容器自动滚动div到最后一行.什么是jQuery版本tr.scrollintoView()

Abh*_*Rao 84

如果您需要滚动到列表中的任意项(而不是始终到底部),以下情况会更好:

function scrollIntoView(element, container) {
  var containerTop = $(container).scrollTop(); 
  var containerBottom = containerTop + $(container).height(); 
  var elemTop = element.offsetTop;
  var elemBottom = elemTop + $(element).height(); 
  if (elemTop < containerTop) {
    $(container).scrollTop(elemTop);
  } else if (elemBottom > containerBottom) {
    $(container).scrollTop(elemBottom - $(container).height());
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 先生,这不仅仅是一个答案,而是一个解决方案.谢谢. (8认同)
  • @Laurens:仅当可滚动元素是子对象的直接父元素时才有效.更强大的解决方案是迭代其祖先,直到找到.css("overflow")返回"auto"或"scroll"的元素. (2认同)
  • 你的第四行不应该是var elemTop = element.get(0).offsetTop?在我这样做之前,代码没有工作. (2认同)
  • 虽然这个解决方案几乎可行,但它存在严重的问题。一是拼写错误,但更严重的是它不能优雅地处理任何高度的项目。更好的解决方案是 @Robert Koritnik 的插件 (2认同)

Gau*_*sie 75

var rowpos = $('#table tr:last').position();

$('#container').scrollTop(rowpos.top);
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩!

  • 我找到了一个案例,其中没有按预期工作,作为下面的答案添加略有不同的来源. (3认同)

Rob*_*nik 29

仅在需要时滚动(带动画)的插件

我写了一个jQuery插件,它完全按照它在锡上所说的那样(也正是你需要的).好处是它只会在元素实际关闭时滚动容器.否则不会执行滚动.

它的工作原理很简单:

$("table tr:last").scrollintoview();
Run Code Online (Sandbox Code Playgroud)

它会自动找到具有多余内容且显示滚动条的最近的可滚动祖先.因此,如果有另一个祖先overflow:auto但不可滚动将被跳过.这样你就不需要提供可滚动元素了,因为有时你甚至不知道哪一个是可滚动的(我在我的Sharepoint站点中使用这个插件,其中content/master是开发人员独立的,因此它超出了我的控制 - HTML可能会改变当站点运行时,可滚动容器).


Mor*_*esh 19

更简单:

$("selector for element").get(0).scrollIntoView();
Run Code Online (Sandbox Code Playgroud)

如果选择器中有多个项目返回,则get(0)将只获得第一个项目.


Bar*_*aes 5

这个可运行的示例显示了如何使用所有现代浏览器都支持的scrollIntoView():https : //developer.mozilla.org/zh-CN/docs/Web/API/Element.scrollIntoView#Browser_Compatibility

下面的示例使用jQuery选择的元素#yourid

$( "#yourid" )[0].scrollIntoView();
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p id="yourid">Hello world.</p>
<p>..</p>
<p>..</p>
<p>..</p>
<p>..</p>
Run Code Online (Sandbox Code Playgroud)