评论

延迟显示loading组件

可控制延迟显示的微信小程序 loading 组件,默认请求超过0.5s才显示loading动画;支持 slot 自定义 loading 显示内容

一、npm包介绍

可控制延迟显示的微信小程序 loading 组件,默认请求超过0.5s才显示loading动画;支持 slot 自定义 loading 显示内容。

在项目中,若网络良好的情况下,每次请求都显示loading动画,会导致页面短时间内频繁闪现loading动画,用户体验不佳。本组件可自定义请求延时,只有当请求超过设置的时间未完成时,才显示loading动画,减少loading动画出现的次数。

点击查看 demo

二、使用

1.安装 npm i wx-delay-loading

2.组件初始化:在 app.js-onLaunch 执行组件实例初始化方法,并传入用于控制 loading 组件显示隐藏的页面 data 内变量的名称(注:参数类型为string,本例使用 isLoading)

// app.js
import DelayLoading from 'wx-delay-loading/utils' 

App({
  onLaunch: function () {
    const Loading = DelayLoading.getInstance()
    Loading.initComponent('isLoading') // 注意:此处没有写错,传入的是 key,而不是 value
  }
})

3.在使用组件的页面或组件的 json 配置内,引入组件(注:微信小程序组件名不允许使用 wx 做前缀)

// page.json
"usingComponents": {
  // 微信小程序组件名不允许使用wx做前缀
  "delay-loading": "wx-delay-loading/index"
}

4.在页面 wxml 中使用, 注:isShow 属性传入的页面属性必须对应第1步 initComponent 传入的参数名(本例使用 isLoading)

// page.wxml 

// 不使用 slot
<delay-loading isShow="{{isLoading}}" />

// 使用 slot 自定义内容
<delay-loading customLoading="{{true}}" isShow="{{isLoading}}">
  <view class="container">
    <image class="logo" src="/static/image/logo.png" mode="widthFix" />
    <view class="text">加载中...</view>
  </view>
</delay-loading>

5.请求开始时(例如 wx.request),调用实例方法 setDelayLoading(delaytime) delaytime 默认为500,即 0.5s;
请求结束时,调用实例方法 checkReqCountClear()

// page.js
import DelayLoading from 'wx-delay-loading/utils'
const Loading = DelayLoading.getInstance()

Page({
  data: {
    isLoading: false
  },

  // 仅为示例
  exampleRequest () {
    // 请求开始
    Loading.setDelayLoading(300) // 请求超过0.3秒没完成,显示 loading 组件
    wx.request({
      url: 'https://example.com/getData',
      complete () {
        // 请求完成
        Loading.checkReqCountClear()
      }
    })
  },

})



进阶:在统一封装请求 request.js 内使用

项目开发中,通常会针对请求和响应进行统一处理,封装成一个 request.js 使用。注意:在使用组件的页面内依然要保留传递给 isShow 属性值的 data 属性

// request.js
import DelayLoading from 'wx-delay-loading/utils'
const Loading = DelayLoading.getInstance()

const request = (options) => {
  return new Promise ((resolve, reject) => {
    // 请求开始前调用设置延时
    Loading.setDelayLoading()
    wx.request({
      ...options,
      success (res) {
        // 请求成功后的各种处理操作...
        resolve(res.data)
      },
      fail (err) {
        // 请求失败后的各种处理操作...
        reject(err)
      },
      complete () {
        // 请求完成
        Loading.checkReqCountClear()
      }
    })
  })
}
export default request
// page.js
import request from request.js

Page({
  data: {
    isLoading: false
  },

  // 仅为示例
  exampleRequest () {
    // 使用封装后的request
    request({
      url: 'https://example.com/getData'
    }).then(res => {
      // 对返回数据的处理...
    })
  },

})

三、调试——模拟低网速情况

通常在网络环境良好的情况下,请求都会很快完成,不会超过0.5s。可以通过微信开发者工具-调试器-Network,把网络设置 Online,更改为 Slow 3G,或者使用 Custom 自定义网络速度。

四、文档

1、组件 options

参数 说明 类型 默认值
customLoading 是否使用 slot 插槽自定义 loading 内容 boolean false
isShow 是否显示 loading boolean false

2、实例 methods

方法名 说明 参数 参数类型 返回值
getInstance 调用其它方法前,获取唯一实例 - - 实例 object
initComponent 全局安装组件,挂载必要属性 页面 data 内传入组件属性 isShow 的变量的名称(告知组件,你使用 data 哪个属性控制组件显示隐藏,必须与传入组件的 isShow 的属性对应) string -
setDelayLoading 标记请求开始并设置延迟显示的时间 延迟的时间,单位毫秒 number -
checkReqCountClear 检测正在进行的请求数,若清零则隐藏 loading 组件 - - -

五、示例

点击查看 demo

最后一次编辑于  2021-03-01  
点赞 3
收藏
评论
登录 后发表内容