当前位置:首页 > VUE

vue实现滚动分页加载

2026-02-25 08:08:33VUE

Vue 实现滚动分页加载

监听滚动事件

通过监听滚动事件判断是否到达页面底部,触发加载更多数据。在组件的 mounted 钩子中添加滚动监听,在 beforeDestroy 钩子中移除监听以避免内存泄漏。

mounted() {
  window.addEventListener('scroll', this.handleScroll);
},
beforeDestroy() {
  window.removeEventListener('scroll', this.handleScroll);
},
methods: {
  handleScroll() {
    const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    const windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
    const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
    if (scrollTop + windowHeight >= scrollHeight - 100) {
      this.loadMore();
    }
  }
}

数据加载逻辑

定义 loadMore 方法,通过 API 请求获取分页数据。使用 loadingfinished 状态避免重复请求或无效请求。

data() {
  return {
    list: [],
    page: 1,
    pageSize: 10,
    loading: false,
    finished: false
  };
},
methods: {
  async loadMore() {
    if (this.loading || this.finished) return;
    this.loading = true;
    try {
      const res = await fetchData(this.page, this.pageSize);
      if (res.data.length === 0) {
        this.finished = true;
      } else {
        this.list = [...this.list, ...res.data];
        this.page++;
      }
    } catch (error) {
      console.error(error);
    } finally {
      this.loading = false;
    }
  }
}

使用第三方库优化

如果需要更简单的实现,可以使用 vue-infinite-scrollvant 等第三方库。以 vant 为例:

<template>
  <van-list
    v-model="loading"
    :finished="finished"
    @load="loadMore"
  >
    <div v-for="item in list" :key="item.id">{{ item.name }}</div>
  </van-list>
</template>

性能优化

对于大量数据渲染,使用虚拟滚动技术(如 vue-virtual-scroller)减少 DOM 节点数量,提升性能。

<template>
  <RecycleScroller
    :items="list"
    :item-size="50"
    key-field="id"
  >
    <template v-slot="{ item }">
      <div>{{ item.name }}</div>
    </template>
  </RecycleScroller>
</template>

注意事项

  • 滚动监听需考虑节流(如使用 lodash.throttle)避免频繁触发。
  • 移动端可能需要额外处理 touch 事件。
  • 分页接口需支持页码和每页条数参数。

vue实现滚动分页加载

标签: 分页加载
分享给朋友:

相关文章

vue 实现异步加载

vue 实现异步加载

Vue 实现异步加载的方法 使用动态 import 实现组件懒加载 在 Vue 中可以通过动态 import() 语法实现组件的异步加载,这会使得组件在需要时才被加载,减少初始加载时间。 const…

vue 分页的实现

vue 分页的实现

Vue 分页的实现方法 使用 Element UI 的分页组件 安装 Element UI: npm install element-ui 在 Vue 项目中引入 Element UI 的分页组件:…

vue懒加载实现难吗

vue懒加载实现难吗

Vue懒加载的实现难度 Vue懒加载的实现并不复杂,尤其是借助现代工具和库的支持。懒加载的核心思想是按需加载资源,通常用于路由或组件,以提升页面初始加载速度。以下是常见的实现方法和注意事项: 路…

vue分页实现

vue分页实现

Vue 分页实现方法 基础分页组件实现 创建一个简单的分页组件,包含上一页、下一页和页码按钮。组件接收当前页码、总页数等参数,通过事件通知父组件页码变化。 <template> &l…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…

vue 实现异步加载

vue 实现异步加载

Vue 异步加载的实现方法 动态导入组件(懒加载) 使用 import() 语法动态导入组件,Vue 会将其转换为异步加载的组件。适用于路由或组件按需加载。 const AsyncComponen…