当前位置:首页 > VUE

vue实现滚动分页加载

2026-02-25 08:08:33VUE

Vue 实现滚动分页加载

监听滚动事件

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

vue实现滚动分页加载

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 状态避免重复请求或无效请求。

vue实现滚动分页加载

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 实现分页的方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成到 Vue 项目中。 安装 Element UI:…

vue分页插件实现

vue分页插件实现

Vue 分页插件实现方法 使用现成组件库(推荐) Element UI、Ant Design Vue 等主流库已提供成熟分页组件,可直接集成: <template> <…

vue实现加载图片

vue实现加载图片

Vue 实现图片加载的方法 在 Vue 中加载图片可以通过多种方式实现,以下是一些常见的方法: 使用静态资源路径 将图片放在 public 或 assets 目录下,通过相对路径或绝对路径引用。…

vue实现页面加载

vue实现页面加载

Vue 实现页面加载的方法 在 Vue 中实现页面加载效果可以通过多种方式完成,以下是几种常见的方法: 使用 v-if 或 v-show 控制加载状态 通过绑定一个布尔值来控制加载动画的显示与隐藏。…

vue实现分页表

vue实现分页表

Vue 实现分页表格 在 Vue 中实现分页表格通常需要结合表格组件和分页组件,以下是常见的实现方法: 使用 Element UI 实现分页表格 安装 Element UI: npm instal…

vue如何实现分页

vue如何实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的分页数据和前端的分页组件。前端需要处理页码切换、数据请求和渲染逻辑。 后端API分页参数 后端API通常需要接收分页参数,例如pag…