如何将滚动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());
但这仅仅是滚动到顶部。想法?谢谢
var scrollTop = $('#contact_' + id).offset().top;
$('#contact-list-scroller').attr('scrollTop', scrollTop);
谢谢,但似乎并没有工作。如果#contact-list-scroller具有以下CSS,它会打击吗?position:absolute; left:0px; top:0px; right:0px; bottom:0px; – AnApprentice 2011-05-01 05:16:43
你可以考虑使用'position()'而不是'offset()'。第一种是相对于父母,后者是相对于文档。 – Sebastien 2017-01-25 16:21:12
看看jQuery的scrollTo插件 - 你可以用它来滚动到特定的DOM元素 http://flesler.blogspot.com/2007/10/jqueryscrollto.html
谢谢,但这个插件还没有更新多年。它安全吗? – 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/
奇怪的是有道理,但不适用于我的应用程序。也许是因为我使用绝对定位... – AnApprentice 2011-05-01 17:14:47
也许是因为它考虑到当前的滚动位置? – AnApprentice 2011-05-01 17:16:46
此外,如果它是一个很长的列表,最终返回-2311等contactTopPosition .. – AnApprentice 2011-05-01 17:21:00
即使我有同样的情况和想滚动元件到顶部。现在,这种行为得到了直接的支持。
只需使用<element>.scrollIntoView(true)
JavaScript方法。
例子:
document.getElementById("yourElementId").scrollIntoView(true);
更多信息:
虽然这是现在的实验,不久将获得在每个浏览器的支持。你可以在这里找到更多的信息:MDN
我看到这个答案是超过一年的时间,但我今天在Chrome上尝试了这个解决方案,它工作正常。 FYI – TheCuBeMan 2016-01-07 16:18:09
scrollIntoView对我无效。我将鼠标悬停在导航项上时显示一个div,在该div中我有2个div。一个只是一个列表,另一个是可滚动并且内容隐藏的另一个div。当他们将鼠标悬停在左侧的某个项目上时,我想让右侧的div滚动到关于该项目的部分。 scrollIntoView正确滚动该div,但也会将整个页面主体滚动到该div的顶部。 – 2018-01-30 19:02:30
同样的问题,'position().top'每次都不工作,找到任何解决方案? – 2014-09-24 10:59:55