小程序-视图与逻辑之二:页面事件
一、下拉刷新
1、什么是下拉刷新事件
下拉刷新事件是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为。
2、启用下拉刷新
在实际开发中,推荐使用第二种方式,为需要的页面单独开启下拉刷新的效果。
3、配置下拉刷新窗口的样式
message.json
{ "usingComponents": {}, "enablePullDownRefresh": true, <span style="color: rgb(255, 0, 0);" data-mce-style="color: #ff0000;"> "backgroundColor": "#efefef", "backgroundTextStyle": "dark"</span> }
4、监听页面的下拉刷新事件
5、停止下拉刷新动作
二、上拉触底事件
1、什么是上拉触底
上拉触底是移动端的专有名词,通过手指在屏幕上拉滑动操作,从而加载更多数据的行为。
2、监听页面的卡拉触底事件
3、配置上拉触底距离
上拉触底距离指的是触发上拉触底事件时,滚动条距离页面底部的距离。
可以在全局或页面的.json配置文件中,通过onReachBottomDistance属性来配置卡拉触底的距离。
小程序默认的触底距离是50px,在实际开发中,可以根据需要修改这个默认值。
4、上拉触底案例
4.1案例展示
4.2案例的实现步骤
- 定义获取随机颜色的方法
- 在页面加载时获取初始数据
- 渲染UI结构并美化页面效果
- 在上拉触底时调用获取随机颜色的方法
- 添加loading提示效果
- 对上拉触底进行节流处理
4.3步骤1-定义获取随机颜色的方法
4.3步骤2-在页面加载时获取初始数据
4.3步骤3-渲染UI结构并美化页面效果
/* pages/contact/contact.wxss */
/* pages/contact/contact.wxss */ .num-item{ /*给每项添加边框线 及 颜色*/ border:1rpx solid #efefef; /*方框圆角样式*/ border-radius: 8rpx; /*每项行高*/ line-height: 200rpx; /*每项间的距离*/ margin: 15rpx; /*文本居中*/ text-align: center; /*给文本添加阴影效果:横向偏移 纵向偏移 阴影扩散 阴影颜色*/ text-shadow: 0rpx 0rpx 5rpx #fff; /*给边框盒子添加阴影效果:横向偏移 纵向偏移 阴影扩散 阴影颜色*/ text-shadow: 1rpx 1rpx 6rpx #aaa; }
4.3步骤4-上拉触底时获取随机颜色
4.3步骤5-添加loading提示效果
4.3步骤6-对上拉触底进行节流处理
- 在data中定义isLoading节流阀
- false表示当前没有进行任何数据请求
- true表示当前正在进行数据请求
- 在getColore()方法中修改isLoading节流阀的值
- 在刚调用getColors时将节流阀设置为ture
- 在网络请求的complete回调函数中,将节流阀重置为false
- 在onReachBottom中判断节流阀的值,从而对数据请求进行节流控制
- 如果节流阀的值为true,则阻止当前请求
- 如果节流阀的值为false,则发起当前请求
- 在data中定义isLoading节流阀
// pages/contact/contact.js
// pages/contact/contact.js Page({ /** * 页面的初始数据 */ data: { colorList:[], isLoading:false }, getColors(){ this.setData({ isLoading:true }) //需要展示loading效果 wx.showLoading({ title: '数据加载中...', }) wx.request({ url: 'https://www.escook.cn/api/color', method:'GET', success:({date:res}) =>{ this.setData({ // ...展开数组,并添加新的数据进入,再把新值赋给数组 colorList:[...this.data.colorList,...res.data] }) }, complete:() => { //隐藏加载效果 wx.hideLoading({ success: (res) => {}, }) this.setData({ isLoading:false }) } }) }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { this.getColors() }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { //如果isLoading为ture,则进行数据节流 if(this.isLoading) return this.getColors() },