微信小程序开发学习笔记《14》上拉触底事件案例

news2025/5/22 13:43:51

微信小程序开发学习笔记《14》上拉触底事件案例

博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读对应官方文档

一、最终实现效果

实现在加载完这一页之后,刷新之后展示 “数据加载中”,加载完后展示到下一页数据。
在这里插入图片描述

二、案例的实现步骤

  1. 定义获取随机颜色的方法
  2. 在页面加载时获取初始数据
  3. 渲染U结构并美化页面效果
  4. 在上拉触底时调用获取随机颜色的方法
  5. 添加loading提示效果
  6. 对上拉触底进行节流处理

2.1 定义获取随机颜色的方法

/**
 * 页面的初始数据
 */
data: {
  colorList:['red','green','blue','yellow','lightblue','skyblue','cyan','lightgreen','purple','pink'],
    numArray:[0,1,2,3,4,5,6,7,8,9],
    data_order:[]
},

/**
 * 通过更改colorIndex来实现伪随机颜色背景
 */
changeColor(){
    // 这个到时候肯定是发起网络请求,然后返回数据进行渲染
    let numArray = this.data.numArray.slice(); // 使用 slice() 来创建 numArray 的副本;
    let colorList1 = this.data.colorList.slice(); // 使用 slice() 来创建 colorList 的副本;
    for (let i = numArray.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [numArray[i], numArray[j]] = [numArray[j], numArray[i]]; // ES6 解构赋值用于交换元素
      colorList1[i] = this.data.colorList[numArray[i]];
        // console.log(colorList1[i]);
    }
    // console.log(colorList1);
    this.setData({
      numArray: numArray,
      data_order:[...this.data.data_order,...colorList1]
    });
    // console.log(colorList1);
    // console.log(this.data.numArray);
    // console.log(this.data.colorList);
    console.log(this.data.data_order);
  },

2.2 在页面加载时获取初始数据

可以使用onLoad(options) {},来监控页面加载,一旦加载就获取初始数据。

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('页面加载'),
    this.changeColor()   # 监听到加载这个页面,则获取一组随机颜色
  },

使用onLoad函数监控页面加载,当加载这个页面的时候调用changeColor函数,生成随机的数组,以仿造随机的颜色。

2.3 渲染UI结构并美化页面效果

# wxml页面布局代码
<view wx:for="{{colorList}}" wx:key="index" class="num-item" style="background-color: {{item}};">{{colorList[index]}}</view>
# 最主要的是:style="background-color: {{item}}

# wxss文件样式代码
.num-item {
    /* 这个块状的布局感觉很不错 */
    border: 1rpx solid efefef;
    border-radius: 8rpx;
    line-height: 200rpx;
    margin: 15rpx;
    text-align: center;
    text-shadow: 0rpx orpx 5rpx #fff;
    box-shadow: 1rpx 1rpx 6rpx #aaa;
}

2.4 在上拉触底时调用获取随机颜色的方法

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    console.log('上拉触底了');
    this.changeColor()    # 当检测到上拉触底,然后就获取一组随机颜色添加进入数据组
  },

2.5 添加loading提示效果

对应文档:https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showLoading.html

wx.showLoading(Object object)
显示 loading 提示框。需主动调用 wx.hideLoading 才能关闭提示框
在这里插入图片描述
为了添加loading效果,应该在向后端发送网络请求数据前显示数据加载,然后请求数据,请求数据成功关闭。
由于没有后端可以请求,这里就加个效果。

# 在changeColor函数最开始就显示loading效果。

changeColor(){
	wx.showLoading({
	        title: '正在加载中',
	    });
    // 这个到时候肯定是发起网络请求,然后返回数据进行渲染
    let numArray = this.data.numArray.slice(); // 使用 slice() 来创建 numArray 的副本;
    let colorList1 = this.data.colorList.slice(); // 使用 slice() 来创建 colorList 的副本;
   
    for (let i = numArray.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [numArray[i], numArray[j]] = [numArray[j], numArray[i]]; // ES6 解构赋值用于交换元素
      colorList1[i] = this.data.colorList[numArray[i]];
        // console.log(colorList1[i]);
    }
    // console.log(colorList1);
    this.setData({
      numArray: numArray,
      data_order:[...this.data.data_order,...colorList1]
    });
    // console.log(colorList1);
    // console.log(this.data.numArray);
    // console.log(this.data.colorList);
    console.log(this.data.data_order);
    setTimeout(function () {
        wx.hideLoading();
    }, 2000);
  },

2.6 对上拉触底进行节流处理

①在data中定义isloading节流阀
其实就是一个布尔标识符,用来判断是否处理完当前请求了,处理完了才允许发送下一个请求。

②在getColors()方法中修改isloading节流阀的值
在刚调用getColors时将节流阀设置true
在网络请求的complete回调函数中,将节流阀重置为false

③在onReachBottom中判断节流阀的值,从而对数据请求进行节流控制
如果节流阀的值为ture,则阻止当前请求
如果节流阀的值为false,则发起数据请求

现在多了一个属性,可以帮助我们更好地实现节流处理,
在这里插入图片描述
mask属性,可以当显示数据加载中时,设置mask为true,防止用户下拉继续发出请求。

# 在数据加载时,设置其为true,使其不能下拉
wx.showLoading({
        title: '数据加载中...',
        mask:true
    });
 
#在加载完时,设置其为false,使其可以下拉发送请求
setTimeout(function () {
        wx.hideLoading();
        mask:false
    }, 2000);

以上学习笔记都是博主在B站学习黑马程序员课程时的学习笔记,如果有什么问题,烦请联系我删除。

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

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

相关文章

超温报警器电路设计方案汇总

超温报警器电路设计方案&#xff08;一&#xff09; 该超温报警电路由温度采集电路、继电器控制电路、延时电路、秒脉冲信号发生器、计数译码电路、数显电路、报警电路共同构成。下面来详细介绍一下各部分电路的功能。 温度采集电路 温度采集电路由负温度系数的热敏电阻RW、R…

STM32 自学笔记 学习笔记 一

起源&#xff0c;A7,A9,M3&#xff0c;原来弄了A9的TQ2440&#xff0c;结果还得来重新熟悉下32函数JLINK使用SW方式&#xff0c;本来可以下载&#xff0c;但是一根线掉了重新上去&#xff0c;就出各种跟线无关问题&#xff0c;干脆把32断了重新接&#xff0c;结果就成功了&…

服务攻防-开发组件安全JacksonFastJson各版本XStreamCVE环境复现

知识点 1、J2EE-组件Jackson-本地demo&CVE&#xff08;数据处理&#xff09; 2、J2EE-组件FastJson-本地demo&CVE&#xff08;数据处理&#xff09; 3、J2EE-组件XStream-本地demo&CVE&#xff08;数据处理&#xff09; 章节点&#xff1a; 1、目标判断-端口扫描…

【机器学习入门】18种常见的机器学习算法数学公式及解析

机器学习算法基础原理&#xff1a; https://codeknight.blog.csdn.net/article/details/135632808https://codeknight.blog.csdn.net/article/details/135632808 https://codeknight.blog.csdn.net/article/details/135639843https://codeknight.blog.csdn.net/article/detai…

Android 性能优化总结:包体积优化

前言 随着开发不断迭代&#xff0c;App体积越来越大&#xff0c;包大小的增大也会给我们应用带来其他的影响 比如 下载率影响 过大的包体积会影响下载转化率&#xff0c;根据Google Play Store包体积和转化率分析报告显示&#xff0c;平均每增加1M&#xff0c;转化率下降0.2%左…

【MATLAB第95期】#源码分享 | 基于MATLAB的卷积神经网络CNN图像分类源代码分享(含两个案例)

【MATLAB第95期】#源码分享 | 基于MATLAB的卷积神经网络CNN图像分类源代码分享&#xff08;含两个案例&#xff09; 一、案例一 1、背景介绍 目的&#xff1a;训练和测试卷积神经网络&#xff0c;以检测钻头三种类型。 深度学习&#xff08;DL&#xff09;是机器学习的一个子…

Element table组件内容\n换行

漂亮的页面总是让人心旷神怡&#xff0c;层次清晰的页面让用户操作起来也是易于上手及展示。 如下的页面展示就是非常low的&#xff1a;用户根本阅读其中的数据。 在这个页面&#xff0c;根据用户填写过程生成多次填写记录&#xff0c;如果不进行层次性的展示&#xff0c;数据…

【C语言】学生管理系统

学生管理系统是一个用于管理学生信息、成绩、课程等数据的软件系统。在本文中&#xff0c;我们将使用C语言来实现一个简易的学生管理系统&#xff0c;包括学生信息的录入、显示、查询等功能。我们将使用文件来存储学生信息&#xff0c;以便实现持久化存储。 该学生管理…

JAVA 学习 面试(十一)常见设计模式

设计模式 ## 1、创建型模式 对象实例化的模式&#xff0c;创建型模式用于解耦对象的实例化过程。 单例模式&#xff1a;某个类智能有一个实例&#xff0c;提供一个全局的访问点。 工厂模式&#xff1a;一个工厂类根据传入的参量决定创建出哪一种产品类的实例。 抽象工厂模式&a…

Android学习之路(25) Theme和Style

1、官方详细解读 样式和主题背景 | Android 开发者 | Android Developers 2、应用场景 类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。 样式style &#xff1a;应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性 主题theme&…

OpenHarmony—不支持解构赋值

规则&#xff1a;arkts-no-destruct-assignment 级别&#xff1a;错误 ArkTS不支持解构赋值。可使用其他替代方法&#xff0c;例如&#xff0c;使用临时变量。 TypeScript let [one, two] [1, 2]; // 此处需要分号 [one, two] [two, one];let head, tail [head, ...tail]…

WordPress如何使用SQL实现一键关闭/开启评论功能(已有评论)

WordPress本人就自带评论功能&#xff0c;不过由于种种原因&#xff0c;有些站长不想开启评论功能&#xff0c;那么应该怎么实现一键关闭评论功能或开启评论功能呢&#xff1f;或者针对已有评论功能的文章进行一键关闭或开启评论功能应该怎么操作&#xff1f; 如果你使用的Wor…

每日一道面试题:Java中序列化与反序列化

写在开头 哈喽大家好&#xff0c;在高铁上码字的感觉是真不爽啊&#xff0c;小桌板又拥挤&#xff0c;旁边的小朋友也比较的吵闹&#xff0c;影响思绪&#xff0c;但这丝毫不影响咱学习的劲头&#xff01;哈哈哈&#xff0c;在这喧哗的车厢中&#xff0c;思考着这样的一个问题…

Spring - 基本用法参考

Spring 官方文档 Spring容器启动流程&#xff08;源码解读&#xff09; BeanFactoryPostProcessor vs BeanPostProcessor vs BeanDefinitionRegistryPostProcessor&#xff1a; From java doc&#xff1a; BeanFactoryPostProcessor may interact with and modify bean defin…

MyBatis 如何整合 Druid 连接池?

Mybatis 如何整合 Druid 数据连接池呢&#xff1f;首先打开创建的 Maven 工程&#xff0c;找到 pom.xml 文件&#xff0c;添加 Druid 依赖。 <!--druid连接池--> <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId&…

Mac思维导图软件XMind for mac 中文版

XMind for Mac是一款高效、易于使用的思维导图软件&#xff0c;能够帮助用户更好地组织思维和创意。无论您需要制作工作报告、演讲稿还是学习笔记&#xff0c;XMind都能够为您提供卓越的支持和帮助。 软件下载&#xff1a;XMind for mac 中文版下载 XMind for Mac具有直观的界面…

精通Python第18篇—数据之美:Pyecharts水球图绘制与交互的完整教程

Pyecharts水球图绘制与交互的完整教程 在数据可视化领域&#xff0c;Pyecharts是一个强大而灵活的工具&#xff0c;它能够以美观的方式呈现各种图表&#xff0c;其中之一就是炫酷水球图。水球图能够生动地展示数据的比例关系&#xff0c;给用户一种直观的感受。本文将深入介绍…

爬虫基础-计算机网络协议

一个数据的传输 这些设备的数据转发是通过协议来完成的&#xff0c;整个互联网可以说是完全由网络协议来维持的 不同的协议分工不同&#xff0c;比如ip协议确保了ip寻址&#xff0c;tcp协议确保了数据完整性 IP地址和URL ip地址 整个网络传输可以比作快递&#xff0c;数据就…

C51 单片机学习(一):基础外设

参考 51单片机入门教程 1. 单片机简介 1.1 定义 单片机&#xff08;Micro Controller Unit&#xff0c;简称 MCU&#xff09; 内部集成了 CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集&#xff08;依靠传感器&#xff09;、处…

【Spark系列2】Spark编程模型RDD

RDD概述 RDD最初的概述来源于一片论文-伯克利实验室的Resilient Distributed Datasets&#xff1a;A Fault-Tolerant Abstraction for In-Memory Cluster Computing。这篇论文奠定了RDD基本功能的思想 RDD实际为Resilient Distribution Datasets的简称&#xff0c;意为弹性分…