小编Ulr*_*ner的帖子

使用 CDK 自动调整虚拟滚动策略保持滚动位置

使用 CDK 自动调整虚拟滚动策略保持滚动位置

我有一个可以与滚动的项的大名单<cdk-virtual-scroll-viewport autosize>提供@angular/cdk-experimental(该项目具有动态的高度,所以我用这个卷轴策略,而不是FixedSizeVirtualScrollStrategy)。

随着时间的推移,新项目被插入到列表中,即它们被附加到顶部。当用户向下滚动时,我想避免新项目将视口中的项目推开。因此,我需要一种机制来在添加项目后保持/恢复滚动位置。

我有一个半有效的解决方案(而且很麻烦,因为它读取私有字段),但是在添加项目后视口会随机移动几个像素。

以下是相关代码部分:

@ViewChild(CdkVirtualScrollViewport) viewport: CdkVirtualScrollViewport;

...

// After new items have been added:

const offset = this.viewport.measureScrollOffset('top');
const topPosition = offset + newItems.length * this.viewport['_scrollStrategy']._averager._averageItemSize; // the autosize strategy determines an average item size I'm trying to use to determine how the viewport should be shifted

this.viewport.scrollTo({
  top: topPosition
});
Run Code Online (Sandbox Code Playgroud)

我在这里创建了这种方法的演示:https : //stackblitz.com/edit/angular-be926g?file=src/app/cdk-virtual-scroll-overview-example.ts

任何想法如何通过恒定视口无缝地实现这一目标?

angular-material angular angular-cdk angular-cdk-virtual-scroll

6
推荐指数
1
解决办法
1111
查看次数