2

有一种优化大型数据集渲染的奇妙模式,称为虚拟滚动。在这种特定情况下,我使用 Angular Material CDK api 的https://material.angular.io/cdk/scrolling/overview来获得该行为。但是,当用户导航到不同的页面并返回时,我有一个要求,用户应该在她离开的那个特定位置(例如导航到项目 3498 的详细信息,返回时应该从项目 3498 而不是项目 1 开始)。实现这一目标的最佳方法是什么?

4

3 回答 3

2

实施了 Francesco Borzi 的建议,并且效果很好。这是 stackblitz 的实现。大多数操作发生在 cdk-virtual-scroll-overview-example 文件中。

于 2019-05-13T23:34:53.873 回答
2

您可以注入CdkVirtualScrollViewport视图子项:

@ViewChild(CdkVirtualScrollViewport) virtualScroll: CdkVirtualScrollViewport;

然后您可以使用 和 之类的方法this.getOffsetToRenderedContentStart()this.setRenderedContentOffset()保存和恢复原始滚动位置。

例如,您可以将此信息存储在服务或本地存储中。

于 2019-05-13T20:21:35.803 回答
0

值得一提的是,还有另外一对有用的方法:measureScrollOffset 和 scrollToOffset。方法measureScrollOffset:

获取从视口开始的当前滚动偏移量(以像素为单位)。

因此,它考虑了用户看到的内容,而不是渲染的内容——比如 getOffsetToRenderedContentStart——对于这种方法,我无法检索相对较小的滚动值。

于 2020-10-19T14:01:37.143 回答