微信小程序倒计时问题

最近写了一个微信小程序24小时倒计时,一般情况下没问题,但是一刷新,倒计时原本是一秒减一次变成了一秒减两次,刷新次数越多,减的数字也越多,后来查了一下原因,发现是刷新时倒计时没有停止,新的倒计时和旧的倒计时重叠,所以就出现了这种问题。

修改后的代码如下,可以封装成一个方法,每次倒计时调用那个方法就可以了:

    // 判断有没有倒计时,有的话先停止,在走倒计时
    if (this.data.interval) {
        //不能直接写 clearInterval(this.data.interval) 不然因为this指向问题,无法停止倒计时
        let stopCountDown = this.data.interval;
        clearInterval(stopCountDown);
    }

    var interval = setInterval(() => {
        // this.data.countDownTime 值为 24:00:00
        var [hours, minutes, seconds] = this.data.countDownTime.split(":").map(Number);
        var secondsNum = hours * 3600 + minutes * 60 + seconds; //获取总秒数

        // 秒数为0,倒计时结束
        if (secondsNum == 0) {
            clearInterval(interval)
            this.setData({
                countDownTime = "00:00:00"
            })
        }

        secondsNum = secondsNum - 1; //总秒数减1
        var HH = Math.floor(secondsNum / 3600).toString().padStart(2, "0"); //获取小时
        var MM = Math.floor((secondsNum % 3600) / 60).toString().padStart(2, "0"); //获取分钟
        var SS = Math.floor(secondsNum % 60).toString().padStart(2, "0"); //获取秒数
        this.setData({
            countDownTime = `${HH}:${MM}:${SS}`
        })
    }, 1000)
    // 把倒计时存起来
    this.setData({
        interval: interval
    })
posted @ 2025-02-25 16:33  visualStudioCode  阅读(51)  评论(0)    收藏  举报