程序员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)
    • 无限滚动 (vue-infinite-loading)
      • 1. 基本用法
      • 2. InfiniteLoading 属性
      • 3. InfiniteLoading 事件
      • 4. InfiniteLoading 方法
      • 5. InfiniteLoading 插槽
      • 6. 使用示例
        • 基本使用
        • 自定义加载指示器
      • 7. 总结
    • 抽屉组件 (Drawer)
  • Element-UI
  • 其他组件
scholar
2024-08-12
目录

无限滚动 (vue-infinite-loading)

# 无限滚动 (vue-infinite-loading)

vue-infinite-loading 是一个用于 Vue.js 应用的无限滚动组件,可以在用户滚动到页面底部时自动加载更多数据,常用于实现内容的懒加载。

提示

无限滚动 (vue-infinite-loading)官方文档链接:https://peachscript.github.io/vue-infinite-loading/#!/ (opens new window)

# 1. 基本用法

基本语法:在 Vue 组件中使用 <infinite-loading> 标签来实现无限滚动,通过绑定 @infinite 事件来触发数据加载。

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      {{ item.name }}
    </div>

    <infinite-loading @infinite="infiniteHandler">
      <span slot="no-more">没有更多内容了</span>
    </infinite-loading>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [],
      currentPage: 1
    };
  },
  methods: {
    infiniteHandler($state) {
      this.loadMoreItems().then(newItems => {
        if (newItems.length) {
          this.items.push(...newItems);
          this.currentPage++;
          $state.loaded();
        } else {
          $state.complete();
        }
      });
    },
    loadMoreItems() {
      // 模拟异步加载数据
      return new Promise(resolve => {
        setTimeout(() => {
          const data = [
            { id: this.items.length + 1, name: 'Item ' + (this.items.length + 1) }
          ];
          resolve(data);
        }, 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
41
42
43
44
45
46
  • @infinite 事件:在滚动到底部时触发,负责加载更多数据。
  • slot="no-more":用于在数据加载完成后显示自定义的提示信息。

# 2. InfiniteLoading 属性

参数 说明 类型 默认值
identifier 用于标识每个页面实例的唯一标识符 string null
spinner 设置加载过程中的自定义指示器 string default
force-use-infinite-wrapper 强制使用内置的 infinite-wrapper 进行滚动检测 boolean false
  • identifier:当你在同一个页面内需要使用多个无限滚动实例时,可以通过设置不同的 identifier 来区分它们。
  • spinner:可以使用自定义的加载指示器(比如旋转图标、进度条等),让加载过程更加个性化。
  • force-use-infinite-wrapper:在一些自定义滚动容器中,可能需要强制使用 infinite-wrapper 来确保滚动检测的准确性。

# 3. InfiniteLoading 事件

事件名 说明 回调参数
@infinite 当滚动到底部时触发的事件 $state(控制加载状态的对象)
  • @infinite:核心事件,绑定后每次滚动到底部时会触发。回调参数 $state 用于控制无限滚动的状态(loaded() 表示加载完成,complete() 表示所有数据加载完成)。

# 4. InfiniteLoading 方法

方法名 说明 参数
loaded() 通知无限滚动加载已完成 无
complete() 通知无限滚动所有数据已加载 无
reset() 重置滚动状态 无
  • loaded():在数据加载完成时调用,告知无限滚动组件可以触发下一次滚动事件。
  • complete():在所有数据加载完成后调用,告知无限滚动组件不再触发加载事件。
  • reset():在数据或状态重置时调用,重新开始无限滚动(通常用于刷新列表)。

# 5. InfiniteLoading 插槽

名称 说明
no-more 当没有更多数据时显示的内容(插槽)
spinner 自定义加载指示器的内容(插槽)
error 在加载数据出错时显示的内容(插槽)
  • no-more:自定义加载完成后的提示信息,通常用于显示 "没有更多内容了"。
  • spinner:自定义加载过程中的指示器内容,通常用于显示加载动画。
  • error:在加载数据时发生错误时显示的内容,通常用于显示错误提示或重试按钮。

# 6. 使用示例

# 基本使用

<template>
  <div>
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>

    <infinite-loading @infinite="infiniteHandler">
      <span slot="no-more">没有更多内容了</span>
    </infinite-loading>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [],
      currentPage: 1
    };
  },
  methods: {
    infiniteHandler($state) {
      this.loadMoreItems().then(newItems => {
        if (newItems.length) {
          this.items.push(...newItems);
          this.currentPage++;
          $state.loaded();
        } else {
          $state.complete();
        }
      });
    },
    loadMoreItems() {
      return new Promise(resolve => {
        setTimeout(() => {
          const data = [
            { id: this.items.length + 1, name: 'Item ' + (this.items.length + 1) }
          ];
          resolve(data);
        }, 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
41
42
43

# 自定义加载指示器

<template>
  <div>
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>

    <infinite-loading @infinite="infiniteHandler">
      <template slot="spinner">
        <div class="custom-spinner">加载中...</div>
      </template>
      <span slot="no-more">没有更多内容了</span>
    </infinite-loading>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [],
      currentPage: 1
    };
  },
  methods: {
    infiniteHandler($state) {
      this.loadMoreItems().then(newItems => {
        if (newItems.length) {
          this.items.push(...newItems);
          this.currentPage++;
          $state.loaded();
        } else {
          $state.complete();
        }
      });
    },
    loadMoreItems() {
      return new Promise(resolve => {
        setTimeout(() => {
          const data = [
            { id: this.items.length + 1, name: 'Item ' + (this.items.length + 1) }
          ];
          resolve(data);
        }, 1000);
      });
    }
  }
};
</script>

<style scoped>
.custom-spinner {
  font-size: 16px;
  color: #007bff;
}
</style>
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
41
42
43
44
45
46
47
48
49
50
51
52
53

# 7. 总结

  • 灵活性:vue-infinite-loading 通过事件和方法提供了灵活的无限滚动控制,适合各种复杂需求。
  • 自定义性:支持通过插槽来自定义加载指示器、没有更多数据时的提示、错误处理等内容。
  • 集成方便:适用于各种 Vue.js 应用,易于与现有项目集成。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
无限滚动 (InfiniteScroll)
抽屉组件 (Drawer)

← 无限滚动 (InfiniteScroll) 抽屉组件 (Drawer)→

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