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

如何实现点击进度条按20%步长增减 支持从0到100%再回退到0

可点击双向增减进度条实现方案

核心修改思路

你现有代码仅实现了单向递增到100%的逻辑,需要新增2部分逻辑:

  • 新增isIncreasing状态记录当前是递增还是递减方向
  • 边界值(0%/100%)触发时自动切换增减方向,中间数值按当前方向步进20%

完整可运行代码

import { useState } from 'react';

const App = () => {
  const [complete, setComplete] = useState(0);
  // 记录当前增减方向,默认初始为递增
  const [isIncreasing, setIsIncreasing] = useState(true);

  const handleClick = () => {
    // 用函数式更新避免异步闭包旧值问题
    setComplete(prevComplete => {
      // 边界触发方向切换
      if (prevComplete === 100) {
        setIsIncreasing(false);
        return prevComplete - 20;
      }
      if (prevComplete === 0) {
        setIsIncreasing(true);
        return prevComplete + 20;
      }
      // 中间值按当前方向步进
      return isIncreasing ? prevComplete + 20 : prevComplete - 20;
    })
  }

  return (
    <div 
      className="parentdiv" 
      onClick={handleClick}
      style={{width: '300px', height: '20px', border: '1px solid #eee', borderRadius: '10px', overflow: 'hidden', cursor: 'pointer'}}
    >
      {/* 进度填充层宽度绑定complete数值 */}
      <div 
        className="childdiv"
        style={{width: `${complete}%`, height: '100%', background: '#409eff', transition: 'width 0.2s ease'}}
      ></div>
    </div>
  )
}

export default App;

补充说明

  • 内置了基础演示样式,你可以替换成自己的className自定义视觉效果
  • 过渡动画属性transition可按需删除,关闭平滑变化效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:18:02