Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在vue.js中的DOM更新上保留滚动位置_Javascript_Html_Vue.js - Fatal编程技术网

Javascript 在vue.js中的DOM更新上保留滚动位置

Javascript 在vue.js中的DOM更新上保留滚动位置,javascript,html,vue.js,Javascript,Html,Vue.js,我有一个聊天应用程序,它加载最近的聊天信息并将它们存储在messages数组中。以前的聊天历史记录加载到scroll上,并将添加到messages数组的开头。加载历史记录时,我需要保留滚动位置 //chat.vue <div ref="chatHistory" @scroll="fetchHistory"> <div v-for="item in messages" :key="item.id"> <span>{{item.body}}

我有一个聊天应用程序,它加载最近的聊天信息并将它们存储在messages数组中。以前的聊天历史记录加载到scroll上,并将添加到messages数组的开头。加载历史记录时,我需要保留滚动位置

//chat.vue
<div ref="chatHistory" @scroll="fetchHistory">
    <div v-for="item in messages" :key="item.id">
        <span>{{item.body}}</span>              
    </div>
</div>

在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
            })
        });
    }
}
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
            })
        });
    }
}