我有一个包含一堆可滚动内容的容器 div(作为我使用 iScroll 的记录——如果这改变了解决方案)。当我滚动到顶部时,我想加载当前滚动位置上方的内容。如果我只是使用 jQuery“prepend();”在 div 前面添加 我的可滚动区域中的内容向下移动。理想情况下,我们希望将当前内容保留在框架中,并使可滚动区域在内容上方向上增长。
有什么想法吗?
谢谢!
我有一个包含一堆可滚动内容的容器 div(作为我使用 iScroll 的记录——如果这改变了解决方案)。当我滚动到顶部时,我想加载当前滚动位置上方的内容。如果我只是使用 jQuery“prepend();”在 div 前面添加 我的可滚动区域中的内容向下移动。理想情况下,我们希望将当前内容保留在框架中,并使可滚动区域在内容上方向上增长。
有什么想法吗?
谢谢!
根据iScroll 网站,它有一个方法叫做scrollToElement
:
scrollToElement(el, runtime)
:滚动到滚动区域内的任何元素。el
必须是 CSS3 选择器。例如:scrollToElement("#elementID", '400ms')
如果您总是预先添加固定数量的div
s (例如始终是单个div
),我想您可以在添加新内容之后立即使用它滚动到(例如)第二个元素:
// ... (prepend new content)
myScroll.scrollToElement('#scroller :nth-child(2)', '0ms');
我还没有尝试过,所以如果这对你有用,请告诉我们。
在快速浏览 iScroll 的源代码后,我发现了以下内容:
x
和y
始终可通过myScroll.x
和获得myScroll.y
。_offset(el)
,它返回任何给定元素的偏移量left
和偏移量。top
这基本上开辟了两种解决方案:
使用_offset(el)
. 虽然可能,但这是不可取的。下划线是标记函数“私有”的约定,除其他外,这意味着它不是官方 API 的一部分。
或者
使用新添加元素的高度:
var x = myScroll.x;
var y = myScroll.y;
// ... (prepend new content)
y += $('#scroller :first-child').outerHeight();
myScroll.scrollTo(x, y, '0ms');
您可能需要传递true
给.outerHeight()
,这使得它包括边距。
再一次,我还没有测试过这个,所以请告诉我们它是否有效。