Progress进度条

展示操作的当前进度。

何时使用#

在操作需要较长时间才能完成时,为用户显示该操作的当前进度和状态。

  • 当一个操作会打断当前界面,或者需要在后台运行,且耗时可能超过 2 秒时;

  • 当需要显示一个操作完成的百分比时。

代码演示

30%
50%

标准的进度条。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress percent={30} />
    <Progress percent={50} status="active" />
    <Progress percent={70} status="exception" />
    <Progress percent={100} />
    <Progress percent={50} showInfo={false} />
  </>
);

export default App;
30%
50%

适合放在较狭窄的区域内。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <div style={{ width: 170 }}>
    <Progress percent={30} size="small" />
    <Progress percent={50} size="small" status="active" />
    <Progress percent={70} size="small" status="exception" />
    <Progress percent={100} size="small" />
  </div>
);

export default App;
0%

会动的进度条才是好进度条。

expand codeexpand code
import { MinusOutlined, PlusOutlined } from 'infra-design-icons';
import { Button, Progress } from 'infrad';
import React, { useState } from 'react';

const App: React.FC = () => {
  const [percent, setPercent] = useState(0);

  const increase = () => {
    let newPercent = percent + 10;
    if (newPercent > 100) {
      newPercent = 100;
    }
    setPercent(newPercent);
  };

  const decline = () => {
    let newPercent = percent - 10;
    if (newPercent < 0) {
      newPercent = 0;
    }
    setPercent(newPercent);
  };

  return (
    <>
      <Progress type="circle" percent={percent} />
      <Button.Group>
        <Button onClick={decline} icon={<MinusOutlined />} />
        <Button onClick={increase} icon={<PlusOutlined />} />
      </Button.Group>
    </>
  );
};

export default App;
75 Days
Done

format 属性指定格式。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress type="circle" percent={75} format={percent => `${percent} Days`} />
    <Progress type="circle" percent={100} format={() => 'Done'} />
  </>
);

export default App;
60%
60%
60%

标准的进度条。type="circle|dashboard" 时不支持分段颜色。

expand codeexpand code
import { Progress, Tooltip } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Tooltip title="3 done / 3 in progress / 4 to do">
      <Progress percent={60} success={{ percent: 30 }} />
    </Tooltip>

    <Tooltip title="3 done / 3 in progress / 4 to do">
      <Progress percent={60} success={{ percent: 30 }} type="circle" />
    </Tooltip>

    <Tooltip title="3 done / 3 in progress / 4 to do">
      <Progress percent={60} success={{ percent: 30 }} type="dashboard" />
    </Tooltip>
  </>
);

export default App;
99.9%
99.9%
90%

linear-gradient 的封装。推荐只传两种颜色。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress
      strokeColor={{
        '0%': '#108ee9',
        '100%': '#87d068',
      }}
      percent={99.9}
    />
    <Progress
      strokeColor={{
        from: '#108ee9',
        to: '#87d068',
      }}
      percent={99.9}
      status="active"
    />
    <Progress
      type="circle"
      strokeColor={{
        '0%': '#108ee9',
        '100%': '#87d068',
      }}
      percent={90}
    />
    <Progress
      type="circle"
      strokeColor={{
        '0%': '#108ee9',
        '100%': '#87d068',
      }}
      percent={100}
    />
  </>
);

export default App;
75%

圈形的进度。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress type="circle" percent={75} />
    <Progress type="circle" percent={70} status="exception" />
    <Progress type="circle" percent={100} />
  </>
);

export default App;
30%

小一号的圈形进度。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress type="circle" percent={30} width={80} />
    <Progress type="circle" percent={70} width={80} status="exception" />
    <Progress type="circle" percent={100} width={80} />
  </>
);

export default App;
0%

会动的进度条才是好进度条。

expand codeexpand code
import { MinusOutlined, PlusOutlined } from 'infra-design-icons';
import { Button, Progress } from 'infrad';
import React, { useState } from 'react';

const App: React.FC = () => {
  const [percent, setPercent] = useState(0);

  const increase = () => {
    let newPercent = percent + 10;
    if (newPercent > 100) {
      newPercent = 100;
    }
    setPercent(newPercent);
  };

  const decline = () => {
    let newPercent = percent - 10;
    if (newPercent < 0) {
      newPercent = 0;
    }
    setPercent(newPercent);
  };

  return (
    <>
      <Progress percent={percent} />
      <Button.Group>
        <Button onClick={decline} icon={<MinusOutlined />} />
        <Button onClick={increase} icon={<PlusOutlined />} />
      </Button.Group>
    </>
  );
};

export default App;
75%
75%

通过设置 type=dashboard,可以很方便地实现仪表盘样式的进度条。若想要修改缺口的角度,可以设置 gapDegree 为你想要的值。

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress type="dashboard" percent={75} />
    <Progress type="dashboard" percent={75} gapDegree={30} />
  </>
);

export default App;
75%
75%
75%

通过设定 strokeLinecap="butt" 可以调整进度条边缘的形状为方形,详见 stroke-linecap

expand codeexpand code
import { Progress } from 'infrad';
import React from 'react';

const App: React.FC = () => (
  <>
    <Progress strokeLinecap="butt" percent={75} />
    <Progress strokeLinecap="butt" type="circle" percent={75} />
    <Progress strokeLinecap="butt" type="dashboard" percent={75} />
  </>
);

export default App;
50%

30%


60%

带步骤的进度条。

expand codeexpand code
import React from 'react';

import { green, red } from '@ant-design/colors';
import { Progress } from 'infrad';

const App: React.FC = () => (
  <>
    <Progress percent={50} steps={3} />
    <br />
    <Progress percent={30} steps={5} />
    <br />
    <Progress percent={100} steps={5} size="small" strokeColor={green[6]} />
    <br />
    <Progress percent={60} steps={5} strokeColor={[green[6], green[6], red[5]]} />
  </>
);

export default App;

API#

各类型共用的属性。

属性说明类型默认值
format内容的模板函数function(percent, successPercent)(percent) => percent + %
percent百分比number0
showInfo是否显示进度数值或状态图标booleantrue
status状态,可选:success exception normal active(仅限 line)string-
strokeColor进度条的色彩string-
strokeLinecap进度条的样式round | butt | square,区别详见 stroke-linecapround
success成功进度条相关配置{ percent: number, strokeColor: string }-
trailColor未完成的分段的颜色string-
type类型,可选 line circle dashboardstringline

type="line"#

属性说明类型默认值版本
steps进度条总共步数number--
strokeColor进度条的色彩,传入 object 时为渐变。当有 steps 时支持传入一个数组。string | string[] | { from: string; to: string; direction: string }-4.21.0: string[]
strokeWidth进度条线的宽度,单位 pxnumber10-

type="circle"#

属性说明类型默认值
strokeColor圆形进度条线的色彩,传入 object 时为渐变string | object-
strokeWidth圆形进度条线的宽度,单位是进度条画布宽度的百分比number6
width圆形进度条画布宽度,单位 pxnumber132

type="dashboard"#

属性说明类型默认值
gapDegree仪表盘进度条缺口角度,可取值 0 ~ 295number75
gapPosition仪表盘进度条缺口位置top | bottom | left | rightbottom
strokeWidth仪表盘进度条线的宽度,单位是进度条画布宽度的百分比number6
width仪表盘进度条画布宽度,单位 pxnumber132