当前位置:首页 > 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 节点数量,提升性能。

vue实现滚动分页加载

<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,可以快速实现分页功能。需要先安装Element UI库。 <t…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

h5实现左右分页

h5实现左右分页

实现左右分页的HTML5方法 在HTML5中实现左右分页效果可以通过多种方式完成,以下是几种常见的方法: 使用CSS Flexbox布局 Flexbox是一种现代的布局方式,可以轻松实现左右分页效果…

vue加载动画实现

vue加载动画实现

Vue 加载动画实现方法 使用 CSS 动画或过渡 在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画: .loading-spinner { width: 40p…

vue router实现分页

vue router实现分页

使用 Vue Router 实现分页 在 Vue.js 项目中,可以通过 Vue Router 结合分页组件实现分页功能。以下是实现分页的几种方法: 使用路由参数传递页码 在路由配置中定义一个动态参…

vue 实现异步加载

vue 实现异步加载

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