如何使用jQuery滚动到特定项目?

Mis*_*hko 247 javascript jquery scroll

我有一个带垂直滚动条的大桌子.我想使用jQuery/Javascript滚动到此表中的特定行.

有没有内置的方法来做到这一点?

这是一个可以玩的小例子.

div {
    width: 100px;
    height: 70px;
    border: 1px solid blue;
    overflow: auto;
}
Run Code Online (Sandbox Code Playgroud)
<div>
    <table id="my_table">
        <tr id='row_1'><td>1</td></tr>
        <tr id='row_2'><td>2</td></tr>
        <tr id='row_3'><td>3</td></tr>
        <tr id='row_4'><td>4</td></tr>
        <tr id='row_5'><td>5</td></tr>
        <tr id='row_6'><td>6</td></tr>
        <tr id='row_7'><td>7</td></tr>
        <tr id='row_8'><td>8</td></tr>
        <tr id='row_9'><td>9</td></tr>
    </table>
</div>
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 548

死简单.不需要插件.

var $container = $('div'),
    $scrollTo = $('#row_8');

$container.scrollTop(
    $scrollTo.offset().top - $container.offset().top + $container.scrollTop()
);

// Or you can animate the scrolling:
$container.animate({
    scrollTop: $scrollTo.offset().top - $container.offset().top + $container.scrollTop()
});?
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子.

文档scrollTop.

  • 如果你想`scrollTo`居中而不是顶部:`scrollTo.offset().top - container.offset().top + container.scrollTop() - (container.height()/ 2)` (6认同)
  • `element.scrollIntoView()` - 这就是所需要的.动画是标准化的.请参阅https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView (6认同)
  • 请注意,代码块的最后部分有一个"不可见"字符.在Edge,chrome中,该字符被视为无效. - 复制贴纸 (5认同)
  • 如果容器有滚动条,则需要考虑scrollTop:scrollTo.offset().top - container.offset().top + container.scrollTop() (4认同)

Dom*_*nic 111

我意识到这不会回答容器中的滚动,但人们发现它很有用,所以:

$('html,body').animate({scrollTop: some_element.offset().top});
Run Code Online (Sandbox Code Playgroud)

我们选择html和body,因为文档滚动条可以在任何一个上,很难确定哪个.对于现代浏览器,您可以逃脱$(document.body).

或者,转到页面顶部:

$('html,body').animate({scrollTop: 0});
Run Code Online (Sandbox Code Playgroud)

或者没有动画:

$(window).scrollTop(some_element.offset().top);
Run Code Online (Sandbox Code Playgroud)

要么...

window.scrollTo(0, some_element.offset().top); // native equivalent (x, y)
Run Code Online (Sandbox Code Playgroud)

  • @Petroff奇怪的是,当我写这篇文章时,我没有注意到元素是在滚动容器中.我会留下我的答案,因为因为问题标题,人们从谷歌搜索到这里滚动身体 (2认同)

Fre*_*lpe 28

我同意凯文和其他人的观点,使用插件是没有意义的.

window.scrollTo(0, $("#element").offset().top);
Run Code Online (Sandbox Code Playgroud)

  • 应当指出,这种方式适用于整个窗口。如果您要滚动显示具有overflow:scroll的内容,则此方法将无效。 (3认同)

lor*_*arq 9

我找到的最佳插件就是这个要点.

它不是一个插件,但它完成了一个人的工作,它解决了我的问题.不幸的是它只适用于FireFox.不知道为什么chrome不喜欢它/不想运行它.

编辑:同时我设法自己做.不需要任何插件.看看我的要点:

// Replace #fromA with your button/control and #toB with the target to which     
// You wanna scroll to. 
//
$("#fromA").click(function() {
    $("html, body").animate({ scrollTop: $("#toB").offset().top }, 1500);
});
Run Code Online (Sandbox Code Playgroud)

  • 我认为除了 jquery 库引用之外,您不需要添加引用。另外 jquery 是一种行业标准。你为什么不使用它?如果没有jquery,它可能是相当可行的,但它仍然需要有人为解析部分编写大量代码。感觉适得其反。仅仅为了滚动到一个简单的 div 就编写一个完整的插件,感觉会适得其反。 (2认同)

小智 5

您可以scrollIntoView()在 javascript 中使用方法。就给id.scrollIntoView();

例如

row_5.scrollIntoView();
Run Code Online (Sandbox Code Playgroud)