vue实现列表滑动下拉加载数据

一、实现效果

二、实现思路

使用滚动事件监听器来检测用户是否滚动到底部,然后加载更多数据

  1. 监听滚动事件。
  2. 检测用户是否滚动到底部。
  3. 加载更多数据。

三、案例代码

复制代码
<div class="drawer-content">
  <div ref="loadMoreTrigger" class="load-more-trigger"></div>
    <div v-if="isLoading" class="loading-button">
      <button type="primary" loading>加载中...</button>
    </div>
</div>

import { onBeforeUnmount, onMounted, ref, watch } from 'vue';

const isLoading = ref(false);
const page = ref(1);

const loadMoreData = async () => {
  if (isLoading.value) return;
  isLoading.value = true;
  // 模拟异步加载数据
  setTimeout(() => {
    const newItems: any = props.chartTableData
      ?.slice(0, 10)
      .map((item) => ({ ...item, id: item.id + page.value * 100 }));
    cardList.value = [...cardList.value, ...newItems];
    page.value += 1;
    isLoading.value = false;
  }, 1000);
};

const handleScroll = () => {
  const drawerContent = document.querySelector('.drawer-content');
  if (drawerContent) {
    const { scrollTop, scrollHeight, clientHeight } = drawerContent;
    if (scrollTop + clientHeight >= scrollHeight - 10) {
      loadMoreData();
    }
  }
};

onMounted(() => {
  const drawerContent = document.querySelector('.drawer-content');
  if (drawerContent) {
    drawerContent.addEventListener('scroll', handleScroll);
  }
});

onBeforeUnmount(() => {
  const drawerContent = document.querySelector('.drawer-content');
  if (drawerContent) {
    drawerContent.removeEventListener('scroll', handleScroll);
  }
});


.load-more-trigger {
  height: 1px;
}
.loading-button {
  text-align: center;
  margin-top: 10px;
}
相关推荐
会周易的程序员2 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
带娃的IT创业者2 小时前
重新定义前端构建速度:深度解析 SWC 如何用 Rust 颠覆 JavaScript 工具链
前端·javascript·rust·前端构建·swc
m0_547486663 小时前
《Vue.js + uni-app全栈开发从入门到实践 》全套PPT课件2026版
vue.js·uni-app
新中地GIS开发老师3 小时前
零基础WebGIS开发入门 | GeoJSON数据持久化
前端·javascript·gis·webgis·三维gis开发
blns_yxl4 小时前
正则驱动实时表单验证(HTML+CSS+JS+正则)
javascript·css·html
Quz4 小时前
QML 与 JavaScript 交互方式:内联函数、外部文件、信号槽与工作线程
javascript·qt
达子6665 小时前
第10章_HarmonyOs开发图解 用JS开发UI
vue.js
Allshadow5 小时前
Nest.js - 连接数据库
javascript·nestjs
冰暮流星5 小时前
javascript之date对象
开发语言·javascript·ecmascript
橘子星5 小时前
别光看教程!手把手拆解 React Todo 项目,一文吃透 5 个核心概念
前端·javascript