我有一个聊天应用程序,它加载最近的聊天消息并将它们存储在 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)
});
}
}
最佳答案
在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
})
});
}
}
关于javascript - 在 vue.js 中保留 DOM 更新时的滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765451/