我有一个聊天应用程序,该应用程序加载最近的聊天消息并将其存储在messages
数组中。以前的聊天记录将滚动加载,并将被添加到messages
数组的开头。载入历史记录时,我需要保留滚动位置
//chat.vue
<div ref="chatHistory" @scroll="fetchHistory">
<div v-for="item in messages" :key="item.id">
<span>{{item.body}}</span>
</div>
</div>
在fetchHistory
方法中,我将旧消息添加到messages
数组的开头
fetchHistory(){
if(this.$refs.messageHistory.scrollTop == 0){
var vm = this
this.currentPage.prevPage().then(paginator => {
vm.messages.unshift(...paginator.messages)
});
}
}
答案 0 :(得分:1)
在nextTick()
函数中从最终高度减去初始高度并更新滚动位置
fetchHistory(){
if(this.$refs.messageHistory.scrollTop == 0){
var initialHeight = this.$refs.messageHistory.scrollHeight
var vm = this
this.currentPage.prevPage().then(paginator => {
vm.messages.unshift(...paginator.messages)
vm.$nextTick(() => {
vm.$refs.messageHistory.scrollTop = vm.$refs.messageHistory.scrollHeight - initialHeight
})
});
}
}