我想创建一个带有“无限”滚动的类似聊天的组件,以便最初用户仅看到最新消息,并且滚动到顶部时-加载了新消息,用户可以看到“较旧”消息。
我正在使用Angular 7,并尝试通过三个不同的组件(properitary,Prime NG的数据滚动并进行了一些更改[倒置]和Infinite Scroll组件)来实现它,但是我一直遇到相同的问题:
在列表的末尾添加新消息时-一切正常,但是当我尝试在列表的开头添加消息时,如果我使用鼠标向上滚动,则不起作用
如果使用键盘-将添加新消息,并相对保持scrollTop位置。但是,如果我使用鼠标向上滚动(鼠标拖动),则将保持ABSOLUTE scrollTop位置,并且用户会松开对消息的跟踪。
示例: 如果最初的子集是消息36-45,并且用户向上滚动到消息36,则我想再加载10条消息(26-35),但将滚动位置保持在消息36上(以实现流畅的体验)。如果我使用键盘向上滚动,就会发生这种情况,但是如果我使用鼠标向上滚动,则将保留-scrollTop的绝对值,并且列表“跳转”到消息26。
我可以通过代码设置scrollTop,但是当继续滚动时,位置会“跳回”到先前的scrollTop值。
知道为什么会这样吗?我该如何解决?