You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中实现5分钟倒计时转换为进度条100%宽度的方法

React 5分钟倒计时进度条实现方案

核心逻辑说明

总倒计时时长固定为300秒(5*60),要实现倒计时归0时进度条宽度为100%,直接通过剩余秒数计算进度百分比即可,无需单独存储进度状态:

// 归0时进度100%,随倒计时推进进度条逐渐填满
const progress = ((300 - countDown) / 300) * 100;

如果需要实现剩余时间越多、进度条越宽(归0时宽度为0%),改为如下公式即可:

const progress = (countDown / 300) * 100;

修改后完整代码

import * as styles from './Screen.module.scss'
import { useState, useEffect } from 'react'

export default function Screen() {
    const [countDown, setCountDown] = useState(0);
    const [runTimer, setRunTimer] = useState(true);

    useEffect(() => {
        let timerId;
        if (runTimer) {
            setCountDown(60 * 5);
            timerId = setInterval(() => {
                setCountDown((countDown) => countDown - 1);
            }, 1000);
        } else {
            clearInterval(timerId);
        }
        return () => clearInterval(timerId);
    }, [runTimer]);

    useEffect(() => {
        if (countDown < 0 && runTimer) {
            console.log("expired");
            setRunTimer(false);
            setCountDown(0);
        }
    }, [countDown, runTimer]);

    const seconds = String(countDown % 60).padStart(2, 0);
    const minutes = String(Math.floor(countDown / 60)).padStart(2, 0);
    
    // 直接计算进度,无需单独存state
    const progress = ((300 - countDown) / 300) * 100;

    const fill = {
        width: `${progress}%`,
        height: '100%',
        backgroundColor: 'green',
        // 原代码属性名错误,改为transition才能触发宽度过渡动画
        transition: 'width 0.45s ease-in-out'
    }

    return (
        <main className={styles.container}>
           <div className={styles.bar}>
               <div className={styles.bar_value}>{minutes}:{seconds}</div>
               <div style={fill}></div>
           </div>
        </main>
    )
}

关键改动说明

  • 移除了冗余的prg状态,进度值直接从countDown派生计算,避免多个状态不同步的bug
  • 修正了样式属性错误:将transform改为transition,实现宽度变化的平滑过渡效果
  • 百分比计算逻辑和需求对齐,倒计时归0时自动达到100%宽度

内容的提问来源于stack exchange,提问作者hegibo2346

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:15:06