千家信息网

微信小程序倒计时组件怎么用

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍"微信小程序倒计时组件怎么用",在日常操作中,相信很多人在微信小程序倒计时组件怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"微信小程序倒计时组件怎
千家信息网最后更新 2025年01月16日微信小程序倒计时组件怎么用

这篇文章主要介绍"微信小程序倒计时组件怎么用",在日常操作中,相信很多人在微信小程序倒计时组件怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"微信小程序倒计时组件怎么用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

重构旧代码

在原来的组件中有一个initDuration属性和3个方法,3个方法分别是countDown,format和runCountDown。

initDuration属性

首先我们需要三个page属性来帮助完成接下来的代码,它们的名字和内容如下:

timer: null, // 存储setInterval的IDflag: false, // 倒计时是否结束的标志num: 0 // 过去的秒数复制代码

在initDuration属性的新的回调方法中,我们封装了clearTimer方法,init初始化方法,并且执行倒计时。

initDuration: {  type: Number,  value: 0,  observer: function (newVal) {    if (this.timer) {      this.clearTimer()    }      this.init() // 重置num和flag    this.runCountDown(newVal)  }},复制代码

一定要注意,当传入的属性的值为默认值,例如这里是0时,是不会触发observer回调的。

/** * 初始化函数 */init: function () {  this.flag = false  this.num = 0}/** * 清空计时器 */clearTimer: function () {  clearInterval(this.timer)  this.timer = null}复制代码

countDown方法

countDown方法是接受一个参数为倒计时的秒数,返回一个倒计时的字符串。在这个方法中没有太大改动,只是改动了一些代码格式。如下:

/** * 计算倒计时 * @param {Number} duration - 秒数时间差 * @returns {string} 倒计时的字符串 */countDown: function (duration) {  if (duration <= 0) {    this.setFlag(true) // 将flag属性设为true    return '00:00:00' // 返回默认时间设置  }  let seconds = this._format(duration % 60)  let minutes = Math.floor(duration / 60)  minutes = minutes >= 60 ? this._format(minutes % 60) : this._format(minutes)  let hours = this._format(Math.floor(duration / 3600))  return `${hours}:${minutes}:${seconds}`},复制代码

format方法

format方法的作用很简单,就是处理小于10的数字展示问题。

/** * 格式化小于10的数字 * @param {Number} time - 小于10的数字 * @returns {string} 格式化后的字符串 */format: function (time) {  return time >= 10 ? time : `0${time}`},复制代码

runCountDown方法

runCountDown方法中的改动比较大,在原来的代码中逻辑比较混乱,穿插了许多无关的代码,其实应该将它们封装起来达到解耦的目的。

runCountDown: function (initDuration) {  // 第一次给倒计时赋值 this.setData({ countDownStr })  this.setCountDownTime(this.countDown(initDuration))  // 每一秒更新一次倒计时  this.timer = setInterval(() => {    if (this.flag == true) { // 倒计时结束      clearInterval(this.timer)      return undefined    }    this.addNum() // this.num += 1    this.setCountDownTime(this._countDown(initDuration - this.num))  }, 1000)},复制代码

增加新功能

我们原来的倒计时组件是缺乏一些功能的,例如传入的时间只能是秒数,倒计时结束后只显示00:00:00,如果传入的值是0的话会不进行初始化(这算是Bug了)。所以我们需要加入以下的新功能:

  • 支持自定义倒计时结束后现实的字符串。

  • 修复传入值为0的Bug。

  • 传入的时间可以是秒数,也可以是UTC时间的字符串。

自定义结束字符串

在倒计时组件中,展示倒计时字符串的是this.data.countDownTime属性。所以在结束时将countDownTime属性的值设为传入的字符串即可。 首先,封装一个赋值方法

setEndContent: function (countDownTime) {  if (countDownTime) {    this.setData({ countDownTime })  }}复制代码

接下来为组件新增加一个属性为 endContent 。

endContent: {  type: String,  value: '00:00:00'}复制代码

接下来,在倒计时结束的位置,调用我们的赋值方法,也就是runCountDown方法的计时器回调函数中。

this.timer = setInterval(() => {  if (this.flag == true) {    clearInterval(this.timer)        this.setEndContent(this.properties.endContent) // 设置结束字符串        return undefined  }      this.addNum()  this.setCountDownTime(this._countDown(initDuration - this.num))}, 1000)复制代码

这样自定义字符串就成功了,在使用组件时传入默认值即可。

修复传入值为0的Bug

这个问题的出现是因为当传入属性为默认值时,不会调用observer回调函数,所以这时我们需要使用组件的 attached 生命周期函数。

attached: function () {  if (this.properties.initDuration <= 0) {    // 如果传入值为零时不会调用observer回调,则直接从这里展示倒计时结束    this.setEndContent(this.properties.endContent)  }}复制代码

可以传入UTC时间字符串

为了简洁起见,我们就不为组件增加新的属性了,依然使用initDuration属性,所以要将其type从Number改为null(小程序的这点不够强,不能选择多类型。)。在修改type后我们需要封装一个将UTC时间字符串解析成倒计时秒数的方法。

parseDate: function (date) {  if (typeof date == 'string') {    // 将传进来的时间减去现在的时间,得到的结果便和直接传进数字值相同    return Math.floor((+new Date(date) / 1000)) - Math.floor((+new Date / 1000))  }    return date}复制代码

在observer回调中调用时如下:

initDuration: {  type: null,  observer: function (newVal) {    if (this.timer) {      this._clearTimer()    }      this._init()    this._runCountDown(this.parseDate(newVal)) // 在这里调用parseData方法  }}复制代码

到此,关于"微信小程序倒计时组件怎么用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

倒计时 方法 代码 字符 字符串 组件 属性 时间 程序 接下来 函数 数字 学习 封装 格式 问题 帮助 新功能 更多 计时器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全法律法规规范性文件 华为网络安全讲义 数据库怎么求返回值 域控制器服务器配置 剑桥数据库安装包在哪里 宽带网络安全密钥是什么 数据库用户所见数据模式 搭建多个服务器 数据库设计过程有哪些 上海国内网络技术代理品牌 网络安全法第59条规定内容 数据库连接上后不能执行 红客联盟网络安全应急响应中心 mit bih心电数据库 服务器能用固态硬盘吗 上北大青鸟学软件开发好学吗 sql数据库中文件有哪些 数据库字段值怎么算 小健人互联网科技有限公司融资 普陀区网络软件开发创新服务 电商系统软件开发服务方案 晨光网络技术有限公司 手游 游戏外挂软件开发 sql备份数据库怎么还原 北邮网络技术研究院张淼垚 工厂物资管理数据库 网络安全英语宣传视频 广东前端软件开发价格 二手服务器处理excel 文件编辑后自动上传到服务器
0