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;
}
相关推荐
m0_748236583 分钟前
【Nginx 】Nginx 部署前端 vue 项目
前端·vue.js·nginx
m0_528723811 小时前
如何在新窗口打开pdf文件,并修改网页标题
前端·javascript·pdf
Lysun0012 小时前
react构建项目报错 `npm install --no-audit --save @testing-l
javascript·react.js·npm
hawk2014bj2 小时前
Vue Router 快速入门
前端·javascript·vue.js
疯狂的沙粒3 小时前
前端开发【插件】moment 基本使用详解【日期】
开发语言·javascript·css
小彭努力中3 小时前
58.在 Vue 3 中使用 OpenLayers 绘制点、线、圆、多边形
前端·javascript·vue.js·arcgis·ecmascript·openlayers
失眠的咕噜3 小时前
el-table 使用el-form 表单验证
前端·javascript·vue.js
可爱的秋秋啊3 小时前
vue3中el-table实现多表头并表格合并行或列
javascript·vue.js·elementui
古怪今人3 小时前
Vue页面开发和脚手架开发 Vue2集成ElementUI Vue3集成Element Plus
前端·vue.js·elementui
HsuYang3 小时前
Vite源码学习(三)——Vite内置插件
前端·javascript·架构