嗨喽,大家好。我是老黑,今天开发了一个两个小时的倒计时的计时器,平时用的60秒倒计时比较多,这次的两个小时倒计时的计时器根本上和60秒倒计时一样,只不过需要多判断点分钟和小时的逻辑。
1、效果图
如图所示,当点击开始的时候,两个小时开始倒计时
2、分析
(1)、需要一个设计一个封装设计计时器。
(2)、倒计时的计时器秒针小于0的时候,分针要减一,分针小于0的时候,时针要减一,当时针小于0的时候,此时分针、秒针的值都要设置为0.并且计时器要停止。
(3)、样式的难点就是如何把时针和分针拆开放在两个容器中?可以先考虑一下,开发的时候我说一下我的解决办法。
3、开发
(1)、wxml主要代码
<view class="time_item">
{{hour}}
</view>
<view class="time_items">
:
</view>
<view class="time_item">
{{firstMinute}}
</view>
<view class="time_item">
{{lastMinute}}
</view>
<view class="time_items">
:
</view>
<view class="time_item">
{{firstSecond}}
</view>
<view class="time_item">
{{lastSecond}}
</view>
</view>
(2)、js主要代码
//倒计时
countDown() {
const that = this;
clearInterval(that.data.timer)
if (that.data.hour_flag == 'one') {
var h = 0;
var m = 59;
var s = 60;
} else {
var h = 1;
var m = 59;
var s = 60;
}
var timer = setInterval(function () {
--s;
if (s < 0) {
--m;
s = 59;
}
if (m < 0) {
--h;
m = 59
}
if (h < 0) {
s = 0;
m = 0;
}
if(h == 0 && m == 0 && s ==0){
clearInterval(that.data.timer);
that.alarmRemind()
}
//小于10的时候进行补位
function checkTime(i) {
if (i < 10) {
i = '0' + i
}
return i;
}
s = checkTime(s);
let n = checkTime(m)
if(n.length >= 2){
m = n.slice(-2);
}
let strMinute = m.toString();
let splMinute = strMinute.split("");
let firstMinute = splMinute[0];
let lastMinute = splMinute[1];
let strSecond = s.toString();
let splSecond = strSecond.split("");
let firstSecond = splSecond[0];
let lastSecond = splSecond[1]
that.setData({
hour: h,
firstMinute: firstMinute,
lastMinute: lastMinute,
firstSecond: firstSecond,
lastSecond: lastSecond
});
}, 1000);
that.setData({
timer: timer
})
},
3、总结
(1)、没错,我用的是js中的split()方法来将倒计时的数字进行拆分然后放到不同的容器中的
(2)、开发过程中遇到的问题就是除了拆分数字,还有就是当秒针或者分针小于10的时候进行0来补位,否则就会出现分针的倒置。
(3)、还有一个问题就是当计时器在不同的情况下要暂停,或者清空重新开始执行,这个时候就要用到clearInterval(timer)来解决了。
(4)、最后感谢博主的文章。https://www.bbsmax.com/A/qVdeqkZ1dP/