el-infinite-scroll 是 Element Plus 框架中的一个无限滚动组件,用于在滚动到底部时自动加载更多内容。这个组件通常用于分页加载大量数据,提升用户体验。
一。el-infinite-scroll 属性详解
-
loading:
- 类型:
Boolean - 用途: 是否正在加载数据。
- 默认值:
false
- 类型:
-
distance:
- 类型:
Number - 用途: 触发加载的距离,单位为像素。
- 默认值:
0
- 类型:
-
immediate-check:
- 类型:
Boolean - 用途: 是否在初始化时立即检查滚动位置。
- 默认值:
true
- 类型:
-
on-top-reached:
- 类型:
Function - 用途: 滚动到顶部时触发的回调函数。
- 类型:
-
on-bottom-reached:
- 类型:
Function - 用途: 滚动到底部时触发的回调函数。
- 类型:
二。 el-infinite-scroll 事件详解
-
top-reached:
- 类型:
Function - 用途: 滚动到顶部时触发的事件。
- 参数:
—
- 类型:
-
bottom-reached:
- 类型:
Function - 用途: 滚动到底部时触发的事件。
- 参数:
—
- 类型:
三。示例代码
<template>
<div>
<h2>Infinite Scroll 示例</h2>
<el-scrollbar style="height: 300px;">
<ul class="infinite-list" v-infinite-scroll="load" infinite-scroll-disabled="loading" infinite-scroll-distance="10">
<li v-for="item in list" :key="item">{{ item }}</li>
</ul>
</el-scrollbar>
<el-button @click="loadMore">手动加载更多</el-button>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
const list = ref([])
const loading = ref(false)
const count = ref(0)
const load = () => {
loading.value = true
setTimeout(() => {
for (let i = 0; i < 20; i++) {
list.value.push(++count.value)
}
loading.value = false
}, 2000)
}
const loadMore = () => {
load()
}
onMounted(() => {
load()
})
</script>
四。 代码解释
-
HTML 结构:
- 使用
el-scrollbar包裹一个列表,列表使用v-infinite-scroll指令监听滚动事件。 -
<el-scrollbar style="height: 300px;"> <ul class="infinite-list" v-infinite-scroll="load" infinite-scroll-disabled="loading" infinite-scroll-distance="10"> <li v-for="item in list" :key="item">{{ item }}</li> </ul> </el-scrollbar>
- 使用
-
JavaScript 逻辑:
- 定义
list数组存储数据,loading标记是否正在加载数据,count记录当前数据的数量。 load方法模拟异步加载数据,每次加载 20 条数据。loadMore方法用于手动触发加载更多数据。onMounted钩子在组件挂载后立即调用load方法加载初始数据。-
import { ref, onMounted } from 'vue' const list = ref([]) const loading = ref(false) const count = ref(0) const load = () => { loading.value = true setTimeout(() => { for (let i = 0; i < 20; i++) { list.value.push(++count.value) } loading.value = false }, 2000) } const loadMore = () => { load() } onMounted(() => { load() })
- 定义