uniapp项目实践总结(十六)自定义下拉刷新组件

导语:在日常的开发过程中,我们经常遇到下拉刷新的场景,很方便的刷新游览的内容,在此我也实现了一个下拉刷新的自定义组件。

目录

  • 准备工作
  • 原理分析
  • 组件实现
  • 实战演练
  • 内置刷新
  • 案例展示

准备工作

  • components新建一个q-pull文件夹,并新建一个q-pull.vue的组件;
  • 按照前面文章所说的页面结构,编写好预定的自定义下拉刷新组件页面;

原理分析

自定义下拉刷新就是在之前自定义滑动触摸组件的基础上,在顶部增加一个刷新的模块。

在页面下拉的时候,判断是否为下滑的方向,如果是就获取数据,数据请求完成后,隐藏刷新模块即可。

组件实现

准备工作和原理分析完成后,接下来写一个简单的组件。

模板部分

这部分主要是显示动画、提示、颜色、背景色以及控制是否展示页面。

<view class="pull"><viewid="pull-container":style="pullInfo.style"ref="pullBox"@touchstart="handlerStart"@touchmove="handlerMove"@touchend="handlerEnd"><view class="pull-head"><view class="pull-text"> {{ pullInfo.tipText }} </view></view><view class="pull-body"><slot></slot></view></view>
</view>

样式部分

.pull {position: relative;width: 100%;height: 100%;#pull-container {position: relative;width: 100%;height: 100%;.pull-head {position: absolute;left: 0;top: 0;width: 100%;text-align: center;transform: translateY(-100%);.pull-text {padding: 30rpx 0;color: $mainColor;font-size: 26rpx;background: $f8;font-weight: bold;}}.pull-body {box-sizing: border-box;padding: 60rpx;text-align: left;font-size: 28rpx;}}
}

脚本部分

  • 引入依赖
// 导入依赖
import { reactive } from "vue";// 页面属性// 下拉刷新
const pullInfo = reactive({style: {},tipText: "",startY: 0,deltaY: 0,slowY: 0,resetTimer: null,resetTime: 500,
});// 发送事件
const emits = defineEmits(["load"]);
  • 开始下拉
function handlerStart(e) {let startY = e.touches[0].pageY;pullInfo.style = "transition: transform 0s";
}
  • 下拉移动
function handlerMove(e) {e.preventDefault();pullInfo.deltaY = e.touches[0].pageY - pullInfo.startY;if (pullInfo.deltaY > 0) {pullInfo.tipText = "下拉刷新";if (pullInfo.deltaY > 60) {pullInfo.tipText = "松开刷新";pullInfo.slowY = (pullInfo.deltaY - 60) * 0.2 + 60;} else {pullInfo.slowY = pullInfo.deltaY;}pullInfo.style = `transform: translateY(${pullInfo.slowY * 2}rpx)`;}
}
  • 下拉结束
function handlerEnd(e) {pullInfo.style = "transition: transform .5s";if (pullInfo.deltaY > 60) {pullInfo.tipText = "正在加载中...";pullInfo.style = "transform: translateY(95rpx)";emits("load");} else {pullInfo.style = "transform: translateY(0)";}
}
  • 复位
function reset() {pullInfo.resetTimer = setTimeout(() => {pullInfo.tipText = "刷新成功!";pullInfo.resetTimer = setTimeout(() => {pullInfo.style = "transform: translateY(0)";clearTimeout(pullInfo.resetTimer);}, pullInfo.resetTime);}, pullInfo.resetTime);
}

实战演练

模板使用

<q-pullref="myPull"@load="loadSet"><!-- 插槽内容 --><view><viewv-for="(item, index) in pull.list":key="index">{{item}}</view></view>
</q-pull>

脚本使用

定义数据

// 列表
const pull = reactive({list: [1, 2, 3, 4, 5, 6],
});

加载内容

function loadSet() {// 请求数据setTimeout(() => {let num = Math.random() * 100;pull.list.push(num);if (proxy.$refs.myPull) {proxy.$refs.myPull.reset();}}, 3000);
}

内置刷新

uniapp 也为我们开发者准备了内置下拉刷新,一起去看看如何使用吧。

引入配置

pages.json文件中找到需要下拉刷新的页面中加入以下配置。

{"path": "pages/index/pull-refresh","style": {"navigationBarTitleText": "下拉刷新","enablePullDownRefresh": true}
}

可以在 APP 端自定义样式,在enablePullDownRefresh下面添加如下配置:

{//..."app-plus": {"pullToRefresh": {"support": true,"color": "#24afd6","style": "circle"}}// ...
}

页面引入

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

监听下拉刷新

// 监听下拉刷新
onPullDownRefresh(() => {// 开始下拉刷新uni.startPullDownRefresh();// 获取数据getData();
});

停止下拉刷新

// 获取数据
function getData() {console.log("获取数据!");setTimeout(() => {uni.stopPullDownRefresh();}, 3000);
}

案例展示

自定义组件

  • h5 端效果
    在这里插入图片描述

  • 小程序端效果
    在这里插入图片描述

  • APP 端效果
    在这里插入图片描述

内置下拉刷新

  • h5 端效果
    在这里插入图片描述

  • 小程序端效果
    在这里插入图片描述

  • APP 端效果
    在这里插入图片描述

最后

以上就是自定义下拉刷新组件的主要内容,有不足之处,请多多指正。

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

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

相关文章

LVS负载均衡群集(NAT模式、IP隧道模式、DR模式)

目录 一、集群 1.1 含义即特点 1.2 群集的类型 1.3 LVS 的三种工作模式&#xff1a; 1.4 LVS 调度算法 1.5 负载均衡群集的结构 1.6 ipvsadm 工具 二、NAT模式 LVS-NAT模式配置步骤&#xff1a; 实例&#xff1a; 配置NFS服务器192.168.20.100 配置web1服务器192.168…

Linux学习之MySQL主从复制

MySQL配置一主一从 环境准备&#xff1a; 两台服务器&#xff1a; Master&#xff1a;192.168.88.53&#xff0c;Slave&#xff1a;192.168.88.54 在两台服务器上安装mysql-server # 配置主服务器192.168.88.53 # 启用binlog日志 [rootmysql53 ~]# yum -y install mysql-ser…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…

Android13-图片视频选择器

在compileSDK 33 时&#xff0c;谷歌在安卓新增了 图片选择器 功能&#xff0c;支持单选、多选、选图片、视频等操作&#xff0c;并且不需要额外获取照片/音频权限。 具体实现如下&#xff1a; 1&#xff1a;请求 Log.d(TAG, "Build.VERSION.SDK_INT" Build.VERS…

Java计算机毕业设计 基于SpringBoot+Vue的毕业生信息招聘平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

代码大全阅读随笔(六)

语句 本章以数据为中心的编程观点转到语句为中心的观点上。本章介绍最简单的控制流&#xff0c;即按照先后顺序放置语句和语句块。 尽管组织直线型代码是一个相对简单的任务&#xff0c;但代码结构上的一些微妙之处&#xff0c;还是对代码质量&#xff0c;正确性&#xff0c;可…

网络请求【小程序】

一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…

CentOS7安装MySQL

文章目录 前言一、MySQL5.71.1 安装wget1.2 下载&安装MySQL的rpm源1.3 修改MySQL安装版本1.4 下载并启动MySQL1.5 开启MySQL远程连接用户 二、MySQL8.0注意事项 前言 CentOS7的安装&#xff0c;采用的是yum的方式安装。 yum方式安装&#xff0c;就类似在Windows下不停的下…

flink时间处理语义

背景 在flink中有两种不同的时间处理语义&#xff0c;一种是基于算子处理时间的时间&#xff0c;也就是以flink的算子所在的机器的本地时间为准&#xff0c;一种是事件发生的实际时间&#xff0c;它只与事件发生时的时间有关&#xff0c;而与flink算子的所在的本地机器的本地时…

Swagger生成Markdown文档

前提条件 1、 本地安装node.js&#xff0c;或者解压安装包 配置环境变量→ 任意路径输入CMD 配置环境变量→ 解压路径输入CMD2、npm换源&#xff08;不然下载仓库有可能报错&#xff09; npm config get registry 查看源n…

API商品数据接口:实现电子商务应用程序的核心功能

随着电子商务的飞速发展&#xff0c;许多电商平台都提供了应用程序接口&#xff08;API&#xff09;&#xff0c;允许开发者调用特定的功能&#xff0c;如商品查询、购物车管理、订单处理以及支付等。这些API为开发者提供了在应用程序中嵌入电商功能的机会&#xff0c;从而为用…

机器学习——决策树/随机森林

0、前言&#xff1a; 决策树可以做分类也可以做回归&#xff0c;决策树容易过拟合决策树算法的基本原理是依据信息学熵的概念设计的&#xff08;Logistic回归和贝叶斯是基于概率论&#xff09;&#xff0c;熵最早起源于物理学&#xff0c;在信息学当中表示不确定性的度量&…

WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台

自国家于2022年发布的《关于加强数字政府建设的指导意见》以来&#xff0c;我国数字政府建设已经迈入了一个全新的里程碑&#xff0c;迎来了全面改革和深化升级的全新阶段。 WorkPlus作为自主可控、可信安全、专属定制的数字化平台&#xff0c;扮演着政务机关、政府单位以及各…

JDK19特性

文章目录 JAVA19概述1. 记录模式(预览版本)2.Linux/RISC-V 移植3.外部函数和内存 API &#xff08;预览版&#xff09;4.虚拟线程(预览版)5.Vector API &#xff08;第四次孵化&#xff09;6.Switch 模式匹配&#xff08;第三预览版&#xff09;7.结构化并发&#xff08;孵化阶…

【算法专题突破】滑动窗口 - 串联所有单词的子串(15)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;30. 串联所有单词的子串 - 力扣&#xff08;LeetCode&#xff09; 这道题其实也很好理解&#xff0c;看一下示例就基本知道是什么意思了&#xff0c; 主要就是找 s 里面…

linux 查看可支持的shell

查看可支持的shell linux中支持多种shell类型&#xff0c;所以在shell文件的第一行需要指定所使用的shell #!/bin/bash 指定该脚本使用的是/bin/bash&#xff0c;这样的机制使得我们可以轻松地引用任何的解释器 查看该linux系统支持的shell cat /etc/shells/bin/sh/bin/bash/us…

Spring Authorization Server常见问题解答(FAQ)

文章导航 Spring Authorization Server入门 (一) 初识SpringAuthorizationServer和OAuth2.1协议 Spring Authorization Server入门 (二) springboot整合Spring Authorization Server Spring Authorization Server入门 (三) 集成流程说明、细节补充和各种方式获取token测试 Spr…

[python 刷题] 242 Valid Anagram

[python 刷题] 242 Valid Anagram 题目&#xff1a; Given two strings s and t, return true if t is an anagram of s, and false otherwise. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the o…

基于springboot+vue的药店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

HTML+CSS画一个卡通中秋月饼

HTMLCSS画一个卡通中秋月饼&#x1f96e;&#x1f96e;&#x1f96e; 中秋活动水个文章 整个divcss实现个月饼&#xff0c;给前端初学者一个练手的demo 效果图 思路 HTMl 先来个轮廓画脸上的东西&#xff1a;眼睛、眉毛、腮红、嘴巴眼睛丰富下瞳孔画20个花瓣 CSS 轮廓是要外…