Uniapp中实现加载更多、下拉刷新、返回顶部功能

news2025/1/15 12:51:01

一、加载更多:

在到达底部时,将新请求过来的数据追加到原来的数组即可:

import {
	onReachBottom
} from "@dcloudio/uni-app";

const pets = ref([]); // 显示数据

function network() {
		uni.request({
			url: "https://api.thecatapi.com/v1/images/search",
			data: {
				limit: 10
			}
		}).then(res => {
			pets.value = [...pets.value, ...res.data]; 
		}).catch(error => {
			uni.showToast({
				title: '请求有误会',
				icon: "none"
			})
		}).finally(() => {
			// uni.hideLoading();
			uni.hideNavigationBarLoading();
			uni.stopPullDownRefresh();
		})
}

onReachBottom(() => {
	network();
})

二、下拉刷新:

在下拉时加载新数据:

	import {
		onPullDownRefresh
	} from "@dcloudio/uni-app";

	onPullDownRefresh(() => {
		pets.value = []; // 先将原来的数据清空,然后加载新数据
		network();
	})

三、返回顶部:

使用Uniapp界面滚动API实现:

		uni.pageScrollTo({
			scrollTop: 0,
			duration: 100
		})

其它知识点:

uni.showNavigationBarLoading(); // 导航栏中显示加载状态
uni.hideNavigationBarLoading(); // 导航栏中隐藏加载状态
    
// 页面中显示加载状态
uni.showLoading({
     title: '加载中'
});

uni.hideLoading(); // 页面中隐藏加载状态

uni.startPullDownRefresh(); // 下拉,需在pages.json对应页面的style位置开启:enablePullDownRefresh
uni.stopPullDownRefresh(); // 停止下拉

env(safe-area-inset-bottom):css中获取底部安全区高度;

组件完整代码:

<template>
	<view class="container">
		<view class="monitor-list-wrapper">
			<view class="monitor-list" v-for="(pet, index) in pets" :key="pet.id">
				<image lazy-load :src="pet.url" mode="aspectFill" class="monitor-photo" @click="onPreview(index)">
				</image>
				<view class="monitor-title">
					{{pet.id}}
				</view>
			</view>
		</view>

		<view class="load-more">
			<uni-load-more status="loading"></uni-load-more>
		</view>

		<view class="float">
			<view class="item" @click="onRefresh"><uni-icons type="refresh" size="26" color="#888"></uni-icons></view>
			<view class="item" @click="onTop"><uni-icons type="arrow-up" size="26" color="#888"></uni-icons></view>
		</view>
	</view>
</template>

<script setup>
	import {
		ref
	} from "vue";

	import {
		onReachBottom,
		onPullDownRefresh
	} from "@dcloudio/uni-app";

	const pets = ref([]);

	function network() {
		// uni.showLoading({
		// 	title: '加载中'
		// });
		uni.showNavigationBarLoading();

		uni.request({
			url: "https://api.thecatapi.com/v1/images/search",
			data: {
				limit: 10
			}
		}).then(res => {
			pets.value = [...pets.value, ...res.data];
		}).catch(error => {
			uni.showToast({
				title: '请求有误会',
				icon: "none"
			})
		}).finally(() => {
			// uni.hideLoading();
			uni.hideNavigationBarLoading();
			uni.stopPullDownRefresh();
		})
	}

	network();

    // 图片预览
	function onPreview(index) {
		const urls = pets.value.map(item => item.url);
		uni.previewImage({
			current: index,
			urls
		})
	}

	function onRefresh() {
		uni.startPullDownRefresh(); // 需在pages.json对应位置开启:enablePullDownRefresh
	}

	function onTop() {
		uni.pageScrollTo({
			scrollTop: 0,
			duration: 100
		})
	}

	onReachBottom(() => {
		network();
	})

	onPullDownRefresh(() => {
		pets.value = [];
		network();
	})
</script>

<style lang="scss" scoped>
	.container {
		padding: 0 $myuni-spacing-super-lg;
		background: #D4ECFF;
	}

	.monitor-list-wrapper {
		display: grid;
		grid-template-columns: repeat(2, 1fr);
		gap: $myuni-spacing-lg;

		.monitor-list {
			border-radius: $myuni-border-radius-base;
			padding: $myuni-spacing-lg;
			width: 305rpx;
			background-color: $myuni-bg-color;

			.monitor-photo {
				height: 200rpx;
				width: 100%;
			}
		}

		.monitor-title {
			height: 32rpx;
			line-height: 32rpx;
			color: $myuni-text-color;
			font-size: $myuni-font-size-lg;
			text-align: center;
		}
	}

	.load-more {
		padding-bottom: calc(env(safe-area-inset-bottom) + 80rpx);
	}


	.float {
		position: fixed;
		right: 30rpx;
		bottom: 80rpx;
		padding-bottom: env(safe-area-inset-bottom);

		.item {
			width: 90rpx;
			height: 90rpx;
			border-radius: 50%;
			background-color: rgba(255, 255, 255, 0.9);
			margin-bottom: 20rpx;
			display: flex;
			align-items: center;
			justify-content: center;
			border: 1px solid #EEE;
		}
	}
</style>

四、实现效果:

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

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

相关文章

Kotlin 循环语句详解

文章目录 循环类别for-in 循环区间整数区间示例1&#xff1a;正向遍历示例2&#xff1a;反向遍历 示例1&#xff1a;遍历数组示例2&#xff1a;遍历区间示例3&#xff1a;遍历字符串示例4&#xff1a;带索引遍历 while 循环示例&#xff1a;计算阶乘 do-while 循环示例&#xf…

【零基础租赁实惠GPU推荐及大语言模型部署教程01】

租赁GPU推荐及大语言模型部署简易教程 1 官网地址2 注册账号及登录3 租用GPU3.1 充值&#xff08;不限制充值最低金额&#xff0c;1元亦可&#xff09;3.2 容器实例&#xff08;实际就是你租用的GPU电脑&#xff09;3.3 选择镜像&#xff08;选择基础环境&#xff1a;框架版本和…

Centos 宝塔安装

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 安装成功界面 宝塔说明文档 https://www.bt.cn/admin/servers#wcu 或者可以注册宝塔账号 1 快速部署 安装docker 之后 2 需要在usr/bin下下载do…

新版AndroidStudio通过系统快捷创建带BottomNavigationView的项目踩坑记录

选择上面这个玩意创建的项目 坑点1 &#xff1a;配置的写法和不一样了 镜像的写法&#xff1a; 新的settings.gradle.kts中配置镜像的代码&#xff1a; pluginManagement {repositories {mavenCentral()google {content {includeGroupByRegex("com\\.android.*")…

Java中网络编程的学习

目录 网络编程概述 网络模型 网络通信三要素: IP 端口号 通信协议 IP地址&#xff08;Internet Protocol Address&#xff09; 端口号 网络通信协议 TCP 三次握手 四次挥手 UDP TCP编程 客户端Socket的工作过程包含以下四个基本的步骤&#xff1a; 服务器程序…

浅谈云计算03 | 云计算的技术支撑(云使能技术)

云计算的技术支撑 一、定义与内涵1.1 定义与内涵 二、云计算使能技术架构2.1 宽带网络和 Internet 架构2.2 数据中心技术2.3 虚拟化技术2.4 Web 技术2.5 多租户技术2.6 服务技术 一、定义与内涵 1.1 定义与内涵 云计算技术包含一些基础的关键技术&#xff0c;这里称为使能技术…

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛&#xff0c;旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程&#xff0c;体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

pip install hnswlib安装不成功

参考这个文章解决了问题&#xff1a;ERROR: Could not build wheels for hnswlib, which is required to install pyproject.toml-based projects 以下是我安装的时候&#xff0c;报错&#xff1a; Building wheel for hnswlib (pyproject.toml) ... errorerror: subprocess-e…

OpenGL学习笔记(四):Shader 着色器(GLSL、Shader类封装)

文章目录 GLSL数据类型输入与输出Uniform的使用Shader类封装练习0练习1练习2练习3 前面的文章提到&#xff0c;着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分运行。从本质上来说&#xff0c;着色器只是一种把输入转化为输出的程序。着色器也是…

移动云自研云原生数据库入围国采!

近日&#xff0c;中央国家机关2024年度事务型数据库软件框架协议联合征集采购项目产品名单正式公布&#xff0c;移动云自主研发的云原生数据库产品顺利入围。这一成就不仅彰显了移动云在数据库领域深耕多年造就的领先技术优势&#xff0c;更标志着国家权威评审机构对移动云在数…

vLLM私有化部署大语言模型LLM

目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM&#xff08;官方网址&#xff1a;https://www.vllm.ai&#xff09;是一种用于大规模语言模型&#x…

Dify社区版部署,更换docker.io避免出现安装失败

这几天在部署Dify的社区版&#xff0c;用docker compose进行部署&#xff0c;看Dify里面的部署文档也是相当简单&#xff0c;只需要几个命令就可以执行完成了&#xff0c;但当开始执行的时候就发现会有各种问题。 Docker Compose最好是升级到最新的版本&#xff0c;我们以前用…

IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南

IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南 什么是 Type Hierarchy&#xff1f; Type Hierarchy 是 IntelliJ IDEA 提供的一个工具&#xff0c;允许开发者查看某个类的继承关系及其实现的接口结构。它是理解类关系的重要工具&#xff0c;尤其在处理复杂的继承体系…

Redis数据结构服务器

Redis数据结构服务器 什么是Redis数据结构服务器 的概念和特点 是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存中的数据结构存储服务器&#xff0c;可用作数据库、缓存和消息中间件。它支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09…

【Linux】进程结束和进程等待

进程的结束 退出码的认识 在我们学习C/C的时候我们通常在进行写main函数时&#xff0c;main函数主体写完后通常会进行写一条语句 " return 0 " &#xff0c;这里的这条语句到底是什么意思呢&#xff1f;&#xff1f; 我们知道当在主函数中调用其他函数或者在其他函…

Spring Boot教程之五十五:Spring Boot Kafka 消费者示例

Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架&#xff0c;使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序&#xff0c;您可…

1月14日作业

将图形类的获取周长和获取面积函数设置成虚函数&#xff0c;完成多态 #include <iostream> #include <cmath> #define PI 3.14159 using namespace std;// 父类&#xff1a;图形类 class Shape { protected:double perimeter;double area; public:Shape():perimet…

基于Springboot + vue实现的文档管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

Spring Boot 2 学习指南与资料分享

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今竞争激烈的 Java 后端开发领域&#xff0c;Spring Boot 2 凭借其卓越的特性&#xff0c;为开发者们开辟了一条高效、便捷的开发之路。如果你渴望深入学习 Spring Boot 2&#xff0c;以下这份精心…

高级软件工程-复习

高级软件工程复习 坐标国科大&#xff0c;下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚&#xff0c;Model, Controller, View各司什么职责明白BDD的User Story需要会写&#xff0c;SMART要求能…