小程序列表滚动加载下一页数据功能实现指南

news2024/9/21 22:38:25

在前端小程序开发中,列表页是用户交互的核心部分之一。为了提高用户体验和页面响应速度,实现列表的滚动加载(也称为“无限滚动”或“懒加载”)功能显得尤为重要。本篇文章将详细介绍如何在小程序中实现这一功能,并提供一些优化建议。

一、功能概述

滚动加载是一种用户在浏览列表时,当滚动到页面底部自动加载更多数据的技术。这种技术可以减少初次加载的数据量,加快页面加载速度,同时按需加载数据,减轻服务器压力。

二、准备工作

  1. 选择合适的开发框架:本例中使用 Vue.js 作为开发框架,因为它具有良好的组件化特性和丰富的生态。
  2. UI组件库:使用 uView UI 组件库,它提供了丰富的组件和简便的使用方法。

三、滚动加载组件实现

模板部分

首先,我们需要创建一个基本的列表页面模板。以下是使用 uView UI 组件库的示例代码

<view class="order-list">
	<u-list height="100%" lowerThreshold="30" :preLoadScreen="page.current * 4" @scrolltolower="scrolltolower">
        <u-empty v-if="messageList.length == 0 && noMoreData !== 'loadmore'" text="暂无数据" mode="list" marginTop="100"></u-empty>
		<view v-for="(item, index) in messageList" :key="index">
			<view class="content-list">列表内容</view>
		</view>
		<u-loadmore :status="noMoreData" :nomore-text="nomoreText" />
		<view style="width: 100%; height: 20rpx; margin-top: 20rpx; background-color: transparent"></view>
	</u-list>
</view>

脚本部分

在 Vue 的 data 函数中初始化状态;在 onShow 生命周期钩子中初始化数据加载;通过监听 scrolltolower 事件来加载更多数据

<script>
import { getMessageList } from '@/api/message.js';

export default {
	data() {
		return {
			page: {
				current: 1,
				size: 10
			},
			noMoreData: 'loadmore',
			nomoreText: '实在没有了',
			messageList: [],        
		}
	},
	onShow() {
		this.page.current = 1
		this.getMessageData();
	},
	methods: {
		scrolltolower() {
			if (this.noMoreData !== 'loadmore') {
				return;
			}
			this.page.current++;
			this.getMessageData(true);
		},
		getMessageData(srcoll) {
			let input = {
				...this.page,
			};
			this.noMoreData = 'loading';
			// 调用接口
			getMessageList(input).then((res) => {
				if (res.code == 200) {
					const newData = res.data.records;
					// ... 拿到接口数据进行处理加载
				}
			});
		},
	}
}
</script>

样式

使用 SCSS 为列表添加样式

<style lang="scss" scoped>
    .order-list {
	    height: calc(100vh - 320rpx);
	    margin: 0 auto;
	    .content-list {
	        width: 95%;
	        margin: 0 auto;
	        height: 100rpx;
	        display: flex;
	    }
	}
</style>

完整代码示例

<view class="order-list">
	<u-list height="100%" lowerThreshold="30" :preLoadScreen="page.current * 4" @scrolltolower="scrolltolower">
               <u-empty v-if="messageList.length == 0 && noMoreData !== 'loadmore'" text="暂无数据" mode="list" marginTop="100"></u-empty>
		<view v-for="(item, index) in messageList" :key="index">
			<view class="content-list">列表内容</view>
		</view>
		<u-loadmore :status="noMoreData" :nomore-text="nomoreText" />
		<view style="width: 100%; height: 20rpx; margin-top: 20rpx; background-color: transparent"></view>
	</u-list>
</view>
 

<script>
import { getMessageList } from '@/api/message.js';

export default {
	data() {
		return {
			page: {
				current: 1,
				size: 10
			},
			noMoreData: 'loadmore',
			nomoreText: '实在没有了',
			messageList: [],        
		}
	},

	onShow() {
	    this.page.current = 1
	    this.getMessageData();
	},

	methods: {
	    scrolltolower() {
	        if (this.noMoreData !== 'loadmore') {
	            return;
	        }
	        this.page.current++;
	        this.getMessageData(true);
	    },
	    getMessageData(srcoll) {
	        let input = {
	            ...this.page,
	        };
	        this.noMoreData = 'loading';
	        getMessageList(input).then((res) => {
	            console.log(res, '消息列表返回值打印');
	            if (res.code == 200) {
	                const newData = res.data.records;
	                if (newData && newData.length > 0) {
	                    if (srcoll) {
	                        this.messageList = this.messageList.concat(newData);
	                        this.noMoreData = 'loadmore';
	                    } else {
                                                        // 这个长度值根据实际开发内容列表来定 
					       // 这个是判断页面首次加载接口列表数据就6条的时候是否到页面底部了,到底部就就不可能继续滚动了显示'nomore'
	                        if (newData.length > 6) {
	                            this.noMoreData = 'loadmore';
	                        } else {
	                            this.noMoreData = 'nomore';
	                        }
	                        this.messageList = newData;
	                    }
	                } else {
	                    this.noMoreData = 'nomore';
	                    if (srcoll) {
	                        this.page.current--;
	                    }
	                }
	            }
	        });
	    },
	}
}
</script>


<style lang="scss" scoped>
	.order-list {
	    height: calc(100vh - 320rpx);
	    margin: 0 auto;
	    .content-list {
	        width: 95%;
	        margin: 0 auto;
	        height: 100rpx;
	        display: flex;
	    }
	}
</style>

四、总结

滚动加载功能是提升小程序用户体验的重要手段之一。通过合理设计数据加载逻辑和界面提示,可以使小程序的列表页更加流畅和友好。希望本篇文章能够帮助你在小程序开发中实现这一功能,并提供一些实用的优化建议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于vue框架的畅饮水站业务管理系统0wf4k(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;员工,会员,矿泉水,订单信息,派送任务,派送进度,评价记录,空桶回收,员工考勤,员工工资 开题报告内容 基于Vue框架的畅饮水站业务管理系统开题报告 一、研究背景与意义 随着健康意识的不断提升&#xff0c;直饮水、纯净水等健康饮水方式…

关于Seata的AT模式以及XA模式的理解

AT 模式 &#xff08;最终一致性&#xff09;的特点是性能较高&#xff0c;因为它只在第一阶段获取锁&#xff0c;在第一阶段提交后释放锁。相比之下&#xff0c;XA 模式&#xff08;强一致性&#xff09;需要在整个事务过程中占用数据库锁&#xff0c;因此性能相对较低。但是&…

为什么在JDBC中使用PreparedStatement?

为什么在JDBC中使用PreparedStatement&#xff1f; &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在JDBC编程中&#xff0c;PreparedStatement 因其以下优势而备受推崇&#xff1a; 性能提升&#xff1a;预编译的SQL语句可快速执行&#…

【C++11及其特性】explicit关键字

explicit关键字目录 一.explicit的含义1.中文含义2.用法 二.显示构造和隐式构造1.源码2.显示构造---()3.隐式构造---4.加上关键字 三.explicit作用 一.explicit的含义 1.中文含义 2.用法 写在构造函数前,那么在创建对象时就只能显示构造了,默认情况下是显示构造和隐式构造都可…

ctfshow之web55~web57(无字母的rce)

目录 web55 思路一&#xff1a; 思路二&#xff1a; web56 web57 本系列主要针对无字母rce或无字母无数字rce 声明&#xff1a;本章内容是引荐几位师傅的博客&#xff0c;然后根据自己的理解编写而成。 web55 if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\…

.net dataexcel winform控件 更新 日志

增加 列宽度调整时动态显示列象素大小 更改列的宽度可以使用 column.Width属性进行修改

文章解读与仿真程序复现思路——电网技术@EI\CSCD\北大核心《基于双缓冲区生成对抗模仿学习的电力系统实时安全约束经济调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

线段树维护更多类型的信息

P3870 [TJOI2009] 开关 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) sum维护一段区域的和&#xff1b;revers记录翻转懒信息&#xff1b; lazy&#xff1a;灯泡翻转后个数就是之前不亮的个数&#xff0c;revers变为原来的反 #include <iostream> using namespace s…

代码随想录第十九天 | 110.平衡二叉树,257. 二叉树的所有路径,404.左叶子之和,222. 完全二叉树的节点个数

110. 平衡二叉树 第一想法&#xff1a;首先要明确平衡二叉树的定义&#xff1f;左右节点的高度差不超过1&#xff1f;不会概念感觉无法下手... 返回参数返回int,为了标记已经不是平衡二叉树&#xff0c;用-1作标记 int traversal(TreeNode* root){if(rootnullptr) return 0;…

Linux_kernel烧写Uboot02

一、温故知新 1、开发环境 Ubuntu的Linux操作系统(18.04 20.04 22.04) 前面的版本号是双数&#xff0c;后面的版本号是04 lsb_release -a 用于查看系统版本号 uname -a 查看系统位数/内核版本号 2、体系架构 APP 各种控制界面\通…

数据库 变更和版本控制管理工具 --Bytebase 安装部署

数据库 变更和版本控制管理工具 --Bytebase 安装部署 文章目录 数据库 变更和版本控制管理工具 --Bytebase 安装部署前言一.Docker部署Bytebase1.Docker 配置2. pull 数据3. 执行部署4. 打开浏览器 部署完成 二、使用步骤1.注册超管2.配置 Configure External URL 总结 前言 B…

点餐收银小程序

一、项目概述 Hi&#xff0c;大家好&#xff0c;今天分享的项目是《点餐收银小程序》。 系统含管理员/商家/用户三种角色&#xff0c;商家能维护菜式类别、维护菜品信息&#xff0c;用户在小程序能够选择门店&#xff0c;查看门店下各个分类的菜式信息&#xff0c;并进行加购…

【vSphere 7/8】深入浅出 vSphere 证书 Ⅲ—— vSphere 证书的更新和替换概述

目录 摘要1. vSphere Certificate Architecture2. 证书更新和替换概述2.1更新 VMCA 签名的证书&#xff08;1&#xff09;使用 vSphere Client UI&#xff08;2&#xff09;使用 vSphere Certificate Manager 命令行工具&#xff08;自动&#xff09;&#xff08;3&#xff09;…

行业大模型元年,“有云处皆智能”的愿景还有多远?

打造新质生产力、推动高质量发展&#xff0c;已成为众多行业用户在数字经济时代的一道必答题。 今年《政府工作报告》就提出要深化大数据、人工智能等研发应用&#xff0c;开展“人工智能”行动&#xff0c;大力推进现代化产业体系建设&#xff0c;加快发展新质生产力。这其中…

IBM是中国IT界的黄埔军校

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我第一次听说IBM还是小的时候&#xff0c;当时很多人都说IBM是厉害&#xff0c;外号“蓝色巨人”&#xff0c;潜移默化我也知道IBM牛了。 而且当年我买的第一款笔记本电脑就是IBM的ThinkPad系列&#xff0c;花了6…

Python酷库之旅-第三方库Pandas(112)

目录 一、用法精讲 491、pandas.DataFrame.cumsum方法 491-1、语法 491-2、参数 491-3、功能 491-4、返回值 491-5、说明 491-6、用法 491-6-1、数据准备 491-6-2、代码示例 491-6-3、结果输出 492、pandas.DataFrame.describe方法 492-1、语法 492-2、参数 492…

中国书法艺术孙溟㠭浅析《平复帖》

中国书法艺术孙溟㠭浅析《平复帖》 《平复帖》是西晋文学家、书法家陆机创作的书法作品&#xff0c;纵23.8厘米、横20.5厘米&#xff0c;共九行、八十四字&#xff0c;是陆机写给久病未愈朋友的问候信札&#xff0c;因其中有“恐难平复”字样&#xff0c;故得“平复帖”之名。 …

【C++ 面试 - STL】每日 3 题(一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

2024最新最全:【计算机自学网站】大全,零基础入门到精通,看完这一篇就够了!

分享32个鲜为人知并且完全免费的高质量自学网站&#xff0c;每个都是堪称神器&#xff0c;让你相见恨晚。 1&#xff1a;Oeasy 是一个完全免费的综合视频教程网站&#xff0c;非常良心实用。 它提供的视频教程非常丰富并且质量很高&#xff0c;包括&#xff1a;PS 教程、手机…

通过 TS-Mixer 实现股票价格预测

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 最近遇到了 Time Mixer 模型,该模型以在复杂数据集上提供令人印象深刻的结果而闻名。出于好奇,我决定将其应用于我在 Kaggle 上找到的数据集,其中包含 Microsoft 的历史股票价格。在本文中,我…