From d6f1cd956e653a56bc6c5df3a80c6beba62279f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E4=B8=81?= Date: Thu, 23 Jul 2026 23:22:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A=E9=A6=96=E5=B1=8F?= =?UTF-8?q?=E6=9C=AA=E5=8D=A0=E6=BB=A1=E6=97=B6=E8=87=AA=E5=8A=A8=E5=86=8D?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E4=B8=80=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/views/Home.vue | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/views/Home.vue b/src/views/Home.vue index c2a6dd7..de32ceb 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -450,9 +450,12 @@ async function loadEvents(page: number, append: boolean, keyword?: string) { pageSize: eventPageSize.value, }) - nextTick(() => { - - }) + // 首屏/刷新后:若未占满可视区域且还有数据,再自动加载一页 + if (!append) { + nextTick(() => { + fillViewportIfNeeded() + }) + } } catch (e) { console.log(e) if (!append) eventList.value = [] @@ -480,6 +483,21 @@ function getMainScrollEl(): Element | null { return document.querySelector('[data-main-scroll]') } +/** 内容未撑满滚动容器可视高度时返回 true */ +function isContentShorterThanViewport(): boolean { + const el = getMainScrollEl() + if (el) { + return el.scrollHeight <= el.clientHeight + SCROLL_LOAD_THRESHOLD + } + return document.documentElement.scrollHeight <= window.innerHeight + SCROLL_LOAD_THRESHOLD +} + +/** 首屏加载后若未占满屏幕且还有更多数据,再触发一次 loadMore */ +function fillViewportIfNeeded() { + if (loadingMore.value || eventList.value.length === 0 || noMoreEvents.value) return + if (isContentShorterThanViewport()) loadMore() +} + function checkScrollLoad() { if (loadingMore.value || eventList.value.length === 0 || noMoreEvents.value) return const el = getMainScrollEl()