From 312dd4fbc040b0f413c9b27149613d6f22c949a0 Mon Sep 17 00:00:00 2001
From: wujingjing <gersonwu@qq.com>
Date: 星期二, 10 九月 2024 17:44:54 +0800
Subject: [PATCH] scroll to bottom;section A Id

---
 src/components/chat/hooks/useScrollToBottom.ts |   37 +++++++++++++++++++++++++++----------
 1 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/src/components/chat/hooks/useScrollToBottom.ts b/src/components/chat/hooks/useScrollToBottom.ts
index b23e8a4..3272653 100644
--- a/src/components/chat/hooks/useScrollToBottom.ts
+++ b/src/components/chat/hooks/useScrollToBottom.ts
@@ -1,20 +1,37 @@
 import type { ComputedRef, Ref } from 'vue';
-import { nextTick, onActivated, ref, watch } from 'vue';
+import { nextTick, onActivated, onUnmounted, ref, watch } from 'vue';
 import type { ChatMessage } from '../model/types';
+import emitter from '/@/utils/mitt';
+import { debounce } from '/@/utils/util';
 
 export type UseScrollToBottomOption = {
 	chatListDom: Ref<HTMLDivElement>;
 	displayMessageList: ComputedRef<ChatMessage[]>;
 };
 
-export const useScrollToBottom = (option:UseScrollToBottomOption) => {
-    const {chatListDom,displayMessageList} = option;
+export const useScrollToBottom = (option: UseScrollToBottomOption) => {
+	const { chatListDom, displayMessageList } = option;
 
-    const scrollToBottom = () => {
-        if (!chatListDom.value) return;
-        chatListDom.value.lastElementChild?.scrollIntoView();
-    };
-    const forbidScroll = ref(false);
+	const scrollToBottom = () => {
+		if (!chatListDom.value) return;
+		const parent = chatListDom.value.parentElement;
+		if (!parent) return;
+		if (parent.scrollHeight > parent.clientHeight) {
+			parent.scrollTop = parent.scrollHeight - parent.clientHeight;
+		}
+	};
+	const debounceAmisScroll = debounce(({ instance }) => {
+		nextTick(() => {
+			scrollToBottom();
+		});
+	}, 500);
+
+	emitter.on('amis.page.ready', debounceAmisScroll);
+
+	onUnmounted(()=>{
+		emitter.off('amis.page.ready');
+	})
+	const forbidScroll = ref(false);
 	watch(
 		displayMessageList,
 		() => {
@@ -32,6 +49,6 @@
 	});
 
 	return {
-        forbidScroll
-    };
+		forbidScroll,
+	};
 };

--
Gitblit v1.9.3