forked from XiaoMo/ChatGPT-Next-Web
fixup: improve auto scroll algo
This commit is contained in:
parent
203067c936
commit
bc5ddc4541
@ -390,7 +390,6 @@ function useScrollToBottom() {
|
||||
|
||||
// auto scroll
|
||||
useEffect(() => {
|
||||
console.log("auto scroll", autoScroll);
|
||||
if (autoScroll) {
|
||||
scrollDomToBottom();
|
||||
}
|
||||
@ -919,9 +918,15 @@ function _Chat() {
|
||||
userInput,
|
||||
]);
|
||||
|
||||
const [msgRenderIndex, setMsgRenderIndex] = useState(
|
||||
renderMessages.length - CHAT_PAGE_SIZE,
|
||||
const [msgRenderIndex, _setMsgRenderIndex] = useState(
|
||||
Math.max(0, renderMessages.length - CHAT_PAGE_SIZE),
|
||||
);
|
||||
function setMsgRenderIndex(newIndex: number) {
|
||||
newIndex = Math.min(renderMessages.length - CHAT_PAGE_SIZE, newIndex);
|
||||
newIndex = Math.max(0, newIndex);
|
||||
_setMsgRenderIndex(newIndex);
|
||||
}
|
||||
|
||||
const messages = useMemo(() => {
|
||||
const endRenderIndex = Math.min(
|
||||
msgRenderIndex + 3 * CHAT_PAGE_SIZE,
|
||||
@ -931,21 +936,20 @@ function _Chat() {
|
||||
}, [msgRenderIndex, renderMessages]);
|
||||
|
||||
const onChatBodyScroll = (e: HTMLElement) => {
|
||||
const EDGE_THRESHOLD = 100;
|
||||
const bottomHeight = e.scrollTop + e.clientHeight;
|
||||
const isTouchTopEdge = e.scrollTop <= EDGE_THRESHOLD;
|
||||
const isTouchBottomEdge = bottomHeight >= e.scrollHeight - EDGE_THRESHOLD;
|
||||
const edgeThreshold = e.clientHeight;
|
||||
|
||||
const isTouchTopEdge = e.scrollTop <= edgeThreshold;
|
||||
const isTouchBottomEdge = bottomHeight >= e.scrollHeight - edgeThreshold;
|
||||
const isHitBottom = bottomHeight >= e.scrollHeight - 10;
|
||||
|
||||
const prevPageMsgIndex = msgRenderIndex - CHAT_PAGE_SIZE;
|
||||
const nextPageMsgIndex = msgRenderIndex + CHAT_PAGE_SIZE;
|
||||
|
||||
if (isTouchTopEdge) {
|
||||
setMsgRenderIndex(Math.max(0, msgRenderIndex - CHAT_PAGE_SIZE));
|
||||
setMsgRenderIndex(prevPageMsgIndex);
|
||||
} else if (isTouchBottomEdge) {
|
||||
setMsgRenderIndex(
|
||||
Math.min(
|
||||
msgRenderIndex + CHAT_PAGE_SIZE,
|
||||
renderMessages.length - CHAT_PAGE_SIZE,
|
||||
),
|
||||
);
|
||||
setMsgRenderIndex(nextPageMsgIndex);
|
||||
}
|
||||
|
||||
setHitBottom(isHitBottom);
|
||||
|
Loading…
Reference in New Issue
Block a user