这份攻略将分为以下几个部分:
我们可以通过以下步骤来实现一个单个倒计时功能:
<view>{{countDown}}</view>
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) // 每秒钟执行一次函数
}
onLoad: function() {
setInterval(this.countDownFunc.bind(this), 1000)
}
这样,我们就完成了一个简单的单个倒计时功能。
如果我们需要实现多个倒计时并且能够同步更新,我们可以使用一个数组来存储倒计时的值和计时器。具体实现如下:
<view id="countDown1">{{countDown1}}</view>
<view id="countDown2">{{countDown2}}</view>
<view id="countDown3">{{countDown3}}</view>
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) // 每秒钟执行一次函数
}
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)
},
这样,我们就完成了一个简单的多个倒计时并且同步更新的功能。
通过上述示例,我们可以实现一个简单、灵活的倒计时功能。在实际开发中,还可以对倒计时进行样式调整、结束时调用相应的回调函数等功能,以达到更好的用户体验。
以上的示例也只是最简单的倒计时功能,如果需要更复杂的倒计时功能,可以参考其他开源项目。
本文链接:http://task.lmcjl.com/news/8631.html