实现逻辑:使用scrollIntoView方法,通过上一次列表的第一条的id对应的dom,滚动到指定位置
<div ref="ref_messages" @scroll="scroll_main_box">
<div
v-for="item in messages"
:key="item.id"
:ref="
(el) => {
ref_messages_nodes[item.id] = el;
}
"
>
//其他的内容
</div>
</div>
- ref_messages_nodes.value[top_id].scrollIntoView();回到上一次查看的位置
const ref_messages_nodes = ref({});
// 上滑触底获取历史聊天分页列表
function scroll_main_box(e) {
let scrollTop = e.target.scrollTop;
if (scrollTop == 0) {
if (data.messages.length < chat_history_params.value.total) {
let top_id = data.messages[0].id;
chat_history_params.value.current = chat_history_params.value.current + 1;
api_getMsgByChatId(chat_history_params.value).then((res) => {
data.messages = [...res.data.list, ...data.messages];
chat_history_params.value.total = res.data.total;
// 将滚动条设置到上次查看的位置
nextTick(() => {
console.log(ref_messages_nodes.value, top_id);
ref_messages_nodes.value[top_id].scrollIntoView();
});
});
}
}
}
博主开发了一个浏览器aweb123.com