程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入手

  • 基础组件

  • 表单组件

  • 数据展示组件

  • 反馈组件

  • 导航组件

  • 其他组件

    • 对话框组件 (Dialog)
    • 文字提示组件 (Tooltip)
    • 弹出框组件 (Popover)
    • 气泡确认框组件 (Popconfirm)
    • 卡片组件 (Card)
    • 走马灯组件 (Carousel)
    • 折叠面板组件 (Collapse)
    • 时间线组件 (Timeline)
    • 分割线组件 (Divider)
    • 日历组件 (Calendar)
    • 图片组件 (Image)
    • 回到顶部组件 (Backtop)
    • 无限滚动 (InfiniteScroll)
      • 1. 基本用法
        • InfiniteScroll 属性
      • 2. InfiniteScroll 常用示例
        • 基本使用
        • 禁用无限滚动
        • 立即执行加载
      • 3. 总结
    • 无限滚动 (vue-infinite-loading)
    • 抽屉组件 (Drawer)
  • Element-UI
  • 其他组件
scholar
2024-08-12
目录

无限滚动 (InfiniteScroll)

# 无限滚动 (InfiniteScroll)

Element-UI 的 InfiniteScroll 组件用于在用户滚动到页面底部时,自动加载更多的数据。这种技术常用于长列表或内容流页面,以提升用户体验,减少加载时的等待时间。

提示

InfiniteScroll 无限滚动组件官方文档:https://element.eleme.cn/#/zh-CN/component/infiniteScroll (opens new window)

# 1. 基本用法

基本语法:使用 v-infinite-scroll 指令绑定在需要滚动的元素上,当用户滚动到该元素的底部时,会自动触发加载更多数据的函数。

<template>
  <ul
    v-infinite-scroll="loadMore"
    infinite-scroll-disabled="loading"
    infinite-scroll-distance="10">
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [], // 数据列表
      loading: false // 加载状态
    };
  },
  methods: {
    loadMore() {
      if (this.loading) return;
      this.loading = true;

      // 模拟异步数据加载
      setTimeout(() => {
        for (let i = 0; i < 10; i++) {
          this.items.push({ id: this.items.length + 1, name: `Item ${this.items.length + 1}` });
        }
        this.loading = false;
      }, 1000);
    }
  }
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  • 无限滚动:通过 v-infinite-scroll 指令绑定在 <ul> 元素上,当用户滚动到底部时自动加载更多数据。
  • 禁用加载:使用 infinite-scroll-disabled 属性控制何时禁用加载功能,如在加载数据时暂时禁用。

# InfiniteScroll 属性

参数 说明 类型 可选值 默认值
infinite-scroll-disabled 是否禁用无限滚动功能 boolean — false
infinite-scroll-delay 节流时延,单位为 ms,控制滚动事件的触发频率 number — 200
infinite-scroll-distance 触发加载的距离阈值,单位为 px,当滚动到距离底部多远时触发加载 number — 0
infinite-scroll-immediate 是否立即执行加载方法,以防初始状态下内容无法撑满容器 boolean — true

# 2. InfiniteScroll 常用示例

# 基本使用

通过 v-infinite-scroll 指令在一个 div 或 ul 元素上实现无限滚动加载数据。

<template>
  <div
    v-infinite-scroll="loadMore"
    style="height: 400px; overflow-y: auto;"
    infinite-scroll-distance="20">
    <div v-for="item in items" :key="item.id" style="padding: 10px;">{{ item.name }}</div>
  </div>
</template>
1
2
3
4
5
6
7
8
  • 滚动容器:将 v-infinite-scroll 指令绑定在可滚动的容器上,确保容器有足够的高度和内容以触发滚动事件。
  • 触发距离:通过 infinite-scroll-distance 设置触发加载的距离阈值。

# 禁用无限滚动

可以通过 infinite-scroll-disabled 属性在特定情况下禁用无限滚动功能,如加载中或数据加载完成时。

<template>
  <div
    v-infinite-scroll="loadMore"
    infinite-scroll-disabled="loading || noMoreData">
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [],
      loading: false,
      noMoreData: false
    };
  },
  methods: {
    loadMore() {
      if (this.loading || this.noMoreData) return;
      this.loading = true;

      setTimeout(() => {
        const newItems = [];
        for (let i = 0; i < 10; i++) {
          newItems.push({ id: this.items.length + 1, name: `Item ${this.items.length + 1}` });
        }
        this.items.push(...newItems);

        // 模拟加载完成
        if (this.items.length >= 50) {
          this.noMoreData = true;
        }

        this.loading = false;
      }, 1000);
    }
  }
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  • 禁用加载:在加载过程中或加载完成时使用 infinite-scroll-disabled 来禁用无限滚动。

# 立即执行加载

在初始加载内容无法撑满容器的情况下,可以使用 infinite-scroll-immediate 属性立即执行加载。

<template>
  <div
    v-infinite-scroll="loadMore"
    infinite-scroll-immediate="true">
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>
  </div>
</template>
1
2
3
4
5
6
7
  • 立即执行加载:当内容不足以撑满容器时,infinite-scroll-immediate 属性可以让加载函数在组件挂载后立即执行。

# 3. 总结

  • 灵活控制:InfiniteScroll 组件通过多种属性允许你灵活控制加载行为,包括禁用、节流、触发距离等。
  • 适用场景:常用于长列表、内容流页面等场景,帮助减少用户等待时间和提升页面性能。
  • 节流机制:通过 infinite-scroll-delay 属性,避免滚动事件触发过于频繁,提升性能。

InfiniteScroll 组件为开发者提供了一个简便的方式来实现自动加载更多数据的功能,可以根据项目需求进行配置和扩展。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
回到顶部组件 (Backtop)
无限滚动 (vue-infinite-loading)

← 回到顶部组件 (Backtop) 无限滚动 (vue-infinite-loading)→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式