// Scroll to the top
$parentDiv.scrollTop($parentDiv.scrollTop() + $innerListItem.position().top);
// Scroll to the center
$parentDiv.scrollTop($parentDiv.scrollTop() + $innerListItem.position().top
- $parentDiv.height()/2 + $innerListItem.height()/2);
7条答案
按热度按时间wwtsj6pe1#
$innerListItem.position().top
实际上是相对于它的第一个定位祖先的.scrollTop()
的,所以计算正确的$parentDiv.scrollTop()
值的方法是从确保$parentDiv
被定位开始,如果它还没有显式的position
,使用position: relative
。元素$innerListItem
和它的所有祖先到$parentDiv
不需要有显式的位置。现在你可以滚动到$innerListItem
:jfgube3f2#
这是我自己的插件(将把元素放在列表的顶部。特别是
overflow-y : auto
。可能不适用于overflow-x
!):注意:
elem
是页面将滚动到的元素的HTML选择器。jQuery支持的任何内容,如:#myid
、div.myclass
、$(jquery object)
、[dom对象]等。如果不需要设置动画,请用途:
使用方法:
型
注意:
#innerItem
可以是#overflow_div
中的任何位置,它不一定是直接子对象。在Firefox(23)和Chrome(28)中测试。
如果要滚动整个页面,请选中this question。
zy1mlcev3#
我调整了Glenn Moss的答案,以说明溢出div可能不在页面顶部的事实。
我在一个带有响应模板的谷歌Map应用程序上使用这个。在分辨率〉800px时,列表在Map的左侧。在分辨率〈800时,列表在Map的下方。
mxg2im7a4#
上面的答案会把inner元素放在overflow元素的顶部,即使它在overflow元素的内部可见。我不希望这样,所以我修改了它,如果元素在视图中,不改变滚动位置。
rqdpfwrv5#
可接受的答案只适用于可滚动元素的直接子元素,而其他答案没有将子元素置于可滚动元素的中心。
示例HTML:
构建一个小的jQuery插件:
用法:
型
说明:
parentEl.scrollTop(...)
设置滚动条的当前垂直位置。parentEl.scrollTop()
获取滚动条的当前垂直位置。parentEl.offset().top
获取parentEl相对于文档的当前坐标。childEl.offset().top
获取childEl相对于文档的当前坐标。parentEl.outerHeight() / 2
得到子元素的外部高度的一半(因为我们希望它居中)。1.使用时:
$(parent).scrollDivToElement(child);
parent是可滚动的div,可以是字符串或DOM元素的jQuery对象。
child是要滚动到的任何子元素,它可以是字符串或DOM元素的jQuery对象。
Codepen demo
zmeyuzjn6#
我编写这两个函数是为了让我的工作更轻松:
并使用它们:
cyej8jka7#
在玩了很长时间之后,这是我想出的:
我这样称呼它