1. 什么是滚动加载
滚动加载又被称为无限滚动、无限加载,它是一种web开发模式,实现了动态加载数据。当页面滚动到底部时,自动触发加载更多数据,避免了一次性加载大量数据带来的性能消耗。滚动加载可以用于图片库、商品展示、社交网络等大规模数据的应用场景。
1.1 滚动加载的优点
1. 优化用户体验。用户可以节省时间和资源,更快速地浏览内容,减轻用户的等待和翻页的负担。
2. 减轻服务器压力。滚动加载可以减少一次性获取大量数据带来的性能压力,提高网页的加载速度。
3. 节省流量。滚动加载只有在用户需要时才会加载数据,避免一次性获取大量数据造成的流量浪费。
2. 使用uniapp实现滚动加载
uniapp是基于Vue.js框架的多端开发框架,可以快速开发跨平台应用。它的特点是使用Vue.js语法进行开发,支持编译到各个平台,如微信小程序、App、H5、QQ小程序等。uniapp封装了滚动视图组件,可以实现滚动加载的效果,下面介绍如何使用uniapp开发滚动加载。
2.1 创建滚动组件
首先,在pages目录下新建一个scroll文件夹,用于存放滚动加载的页面。在scroll文件夹下创建一个scroll.vue文件,代码如下:
<template>
<view class="scroll-view">
//数据列表
<view v-for="(item,index) in list" :key="index" class="scroll-item">
{{item}}
</view>
//加载提示
<view v-if="isLoading" class="loading">正在加载...</view>
<view v-if="isLoadEnd" class="load-end">没有更多数据了</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [], //数据列表
isLoading: false, //是否正在加载
isLoadEnd: false //是否加载到底
}
}
}
</script>
<style>
.scroll-view {
height: 100%;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
.scroll-item {
width: 95%;
height: 100px;
margin: 10px 0;
border: 1px solid #ddd;
box-shadow: 2px 2px 5px #ddd;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
}
.loading,
.load-end {
margin: 10px 0;
color: #aaa;
}
</style>
上述代码中,引入了scroll-view组件,设置了数据列表、是否正在加载和是否加载到底的变量。在view中循环遍历数据列表,并设置了加载提示的样式。
2.2 加载数据
接下来需要通过接口请求加载数据,这里使用Mock模拟数据请求。在uniapp项目的根目录下创建mock文件夹,并在文件夹下创建一个list.json文件,代码如下:
{
"list|30":[
{
"id|+1":1,
"name":"@ctitle",
"img":"../static/img/@image(100x100)",
"time":"@datetime()"
}
]
}
其中,list|30表示生成长度为30的list数组,每个元素包含id、name、img和time字段。Mock数据生成后,需要在scroll.vue文件中使用uni.request方法获取数据。代码修改如下:
<script>
import { request } from '@/utils/request.js'
export default {
data() {
return {
list: [], //数据列表
isLoading: false, //是否正在加载
isLoadEnd: false //是否加载到底
}
},
mounted() {
//初始化数据
this.loadData()
},
methods: {
//加载数据
loadData() {
if (this.isLoading || this.isLoadEnd) {
return
}
this.isLoading = true //开始加载
request({
url: 'http://localhost:3000/list', //请求数据接口
method: 'GET',
data: {
pageNo: this.list.length / 10 + 1,
pageSize: 10
}
})
.then(res => {
this.list = this.list.concat(res.data.list)
this.isLoading = false //加载结束
if (res.data.list.length < 10) {
this.isLoadEnd = true //数据加载到底
}
})
.catch(err => {
this.isLoading = false //加载出错
})
}
}
}
</script>
在mounted生命周期钩子函数中初始化数据,调用loadData方法进行数据加载。loadData方法中,使用request请求数据接口,将返回的数据拼接到数据列表中。最后判断数据是否加载到底,如果是,将isLoadEnd变量设置为true。
2.3 实现滚动加载效果
实现滚动加载效果需要监听滚动事件,判断是否加载更多数据。将scroll-view组件的enable-back-to-top属性设置为true,可以在滚动到顶部时触发scroll事件。代码修改如下:
<template>
<scroll-view class="scroll-view" scroll-y enable-back-to-top @scrolltolower="loadData">
//数据列表
<view v-for="(item,index) in list" :key="index" class="scroll-item">
{{item}}
</view>
//加载提示
<view v-if="isLoading" class="loading">正在加载...</view>
<view v-if="isLoadEnd" class="load-end">没有更多数据了</view>
</scroll-view>
</template>
同时,将scroll-view组件包裹在一个view中,并在view中监听scroll事件,用来实现滚动到底部时加载更多数据。具体实现通过在scroll-view组件中添加@scrolltolower时间来实现,当用户滚动到底部时,会触发loadData方法,加载更多数据。
3. 总结
本文介绍了滚动加载的概念以及如何使用uniapp开发滚动加载功能。使用uniapp可以快速实现跨平台应用开发。在实现滚动加载时,需要注意监听滚动事件,并通过接口请求获取数据。在滚动到底部时,触发加载更多数据的操作。