关键词

微信小程序实现单个或多个倒计时功能

这份攻略将分为以下几个部分:

  1. 实现单个倒计时功能
  2. 实现多个倒计时并且同步更新的功能
  3. 总结和扩展

1. 实现单个倒计时功能

我们可以通过以下步骤来实现一个单个倒计时功能:

  1. 在wxml文件中添加一个倒计时的框架:
<view>{{countDown}}</view>
  1. 在js文件中定义倒计时的初始值和减一的函数:
data: {
  countDown: 10
},
onLoad: function() {
  setInterval(this.countDownFunc.bind(this), 1000) // 每秒钟执行一次函数
},
countDownFunc: function() {
  let intervalId = setInterval(() => {
    if (this.data.countDown > 0) {
      this.setData({
        countDown: this.data.countDown - 1
      })
    } else {
      clearInterval(intervalId) // 倒计时结束,清除计时器
    }
  }, 1000) // 每秒钟执行一次函数
}
  1. 最后,当页面加载完成后,倒计时函数将开始执行:
onLoad: function() {
  setInterval(this.countDownFunc.bind(this), 1000)
}

这样,我们就完成了一个简单的单个倒计时功能。

2. 实现多个倒计时并且同步更新的功能

如果我们需要实现多个倒计时并且能够同步更新,我们可以使用一个数组来存储倒计时的值和计时器。具体实现如下:

  1. 在wxml文件中添加多个倒计时的框架,同时为每一个倒计时框架添加一个唯一的id:
<view id="countDown1">{{countDown1}}</view>
<view id="countDown2">{{countDown2}}</view>
<view id="countDown3">{{countDown3}}</view>
  1. 在js文件中定义包含多个倒计时的数组,并且定义倒计时的初始值和减一的函数。在减一的函数中,我们需要根据当前id更新对应位置的倒计时值,并且当所有倒计时结束后清除计时器:
data: {
  countDownList: [{id: "countDown1", value: 10}, {id: "countDown2", value: 20}, {id: "countDown3", value: 30}]
},
onLoad: function () {
  let countDownList = this.data.countDownList
  let intervalId = setInterval(() => {
    let isAllZero = true
    for (let i = 0; i < countDownList.length; i++) {
      let id = countDownList[i].id
      let value = countDownList[i].value
      if (value > 0) {
        isAllZero = false
        this.setData({
          [`${id}`]: value - 1,
          countDownList: this.data.countDownList.map(item => item.id === id ? {...item, value: item.value - 1} : item)
        })
      }
    }
    if (isAllZero) {
      clearInterval(intervalId)
    }
  }, 1000) // 每秒钟执行一次函数
}
  1. 最后,在页面加载完成后,我们即可启动多个倒计时的计时器:
onLoad: function () {
  let countDownList = this.data.countDownList
  let intervalId = setInterval(() => {
    let isAllZero = true
    for (let i = 0; i < countDownList.length; i++) {
      let id = countDownList[i].id
      let value = countDownList[i].value
      if (value > 0) {
        isAllZero = false
        this.setData({
          [`${id}`]: value - 1,
          countDownList: this.data.countDownList.map(item => item.id === id ? {...item, value: item.value - 1} : item)
        })
      }
    }
    if (isAllZero) {
      clearInterval(intervalId)
    }
  }, 1000)
},

这样,我们就完成了一个简单的多个倒计时并且同步更新的功能。

3. 总结和扩展

通过上述示例,我们可以实现一个简单、灵活的倒计时功能。在实际开发中,还可以对倒计时进行样式调整、结束时调用相应的回调函数等功能,以达到更好的用户体验。

以上的示例也只是最简单的倒计时功能,如果需要更复杂的倒计时功能,可以参考其他开源项目。

本文链接:http://task.lmcjl.com/news/8631.html

展开阅读全文