如何将滚动div内的项目滚动到顶部

如何将滚动div内的项目滚动到顶部

问题描述:

我有一个在页面中滚动的#contact-list-scroller div。基于contact_XXXX ID,我希望设置#contact-list-scroller滚动位置以确保contact_XXX项目位于页面的顶部。如何将滚动div内的项目滚动到顶部

<div id="contact-list-scroller"> 
    <div id="contact_8965">stuff</div> 
    <div id="contact_8966">stuff</div> 
    <div id="contact_8967">stuff</div> 
    <div id="contact_8968">stuff</div> 
    <div id="contact_8969">stuff</div> 
    ..... 
</div> 

这是我到目前为止有:

$('#contact-list-scroller').scrollTop($('#contact_' + id).scrollTop()); 

但这仅仅是滚动到顶部。想法?谢谢

+0

同样的问题,'position().top'每次都不工作,找到任何解决方案? – 2014-09-24 10:59:55

var scrollTop = $('#contact_' + id).offset().top; 

$('#contact-list-scroller').attr('scrollTop', scrollTop); 

jsFiddle

+0

谢谢,但似乎并没有工作。如果#contact-list-scroller具有以下CSS,它会打击吗?position:absolute; left:0px; top:0px; right:0px; bottom:0px; – AnApprentice 2011-05-01 05:16:43

+0

你可以考虑使用'position()'而不是'offset()'。第一种是相对于父母,后者是相对于文档。 – Sebastien 2017-01-25 16:21:12

看看jQuery的scrollTo插件 - 你可以用它来滚动到特定的DOM元素 http://flesler.blogspot.com/2007/10/jqueryscrollto.html

+0

谢谢,但这个插件还没有更新多年。它安全吗? – AnApprentice 2011-05-01 06:03:29

我认为你需要position() .TOP。由于position()返回的值是相对于其父(与offset()不同),因此它使您的代码更加灵活。如果您更改父容器的位置,则代码不会中断。

实施例:

var contactTopPosition = $("#contact_8967").position().top; 
$("#contact-list-scroller").scrollTop(contactTopPosition); 

或动画:

$("#contact-list-scroller").animate({scrollTop: contactTopPosition}); 

见的jsfiddle:http://jsfiddle.net/5zf9s/

+0

奇怪的是有道理,但不适用于我的应用程序。也许是因为我使用绝对定位... – AnApprentice 2011-05-01 17:14:47

+3

也许是因为它考虑到当前的滚动位置? – AnApprentice 2011-05-01 17:16:46

+0

此外,如果它是一个很长的列表,最终返回-2311等contactTopPosition .. – AnApprentice 2011-05-01 17:21:00

即使我有同样的情况和想滚动元件到顶部。现在,这种行为得到了直接的支持。

只需使用<element>.scrollIntoView(true) JavaScript方法。


例子:

document.getElementById("yourElementId").scrollIntoView(true);


更多信息:

虽然这是现在的实验,不久将获得在每个浏览器的支持。你可以在这里找到更多的信息:MDN

+1

我看到这个答案是超过一年的时间,但我今天在Chrome上尝试了这个解决方案,它工作正常。 FYI – TheCuBeMan 2016-01-07 16:18:09

+0

scrollIntoView对我无效。我将鼠标悬停在导航项上时显示一个div,在该div中我有2个div。一个只是一个列表,另一个是可滚动并且内容隐藏的另一个div。当他们将鼠标悬停在左侧的某个项目上时,我想让右侧的div滚动到关于该项目的部分。 scrollIntoView正确滚动该div,但也会将整个页面主体滚动到该div的顶部。 – 2018-01-30 19:02:30