Progress 进度指示器

如果项目中使用的是 0.x 版本的基础组件(@icedesign/base, @ali/ice, @alife/next),请在左侧导航顶部切换组件版本。

安装方法

  1. 在命令行中执行以下命令npm install @alifd/next@latest -S

Guide

展示操作的当前进度。

何时使用

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

  • 操作在后台运行,需要耗费一定的客户端等待时间。

  • 操作需要展示一个完成进度的百分比。

API

Progress

参数说明类型默认值
size尺寸可选值:'small', 'medium', 'large'Enum'medium'
shape形态可选值:'circle', 'line'Enum'line'
percent所占百分比Number0
state进度状态, 显示优先级: color > progressive > state可选值:'normal', 'success', 'error'Enum'normal'
progressive是否为色彩阶段变化模式, 显示优先级: color > progressive > stateBooleanfalse
hasBorder是否添加 Border(只适用于 Line Progress)Booleanfalse
textRender文本渲染函数签名:Function(percent: Number, option: Object) => ReactNode参数:percent: {Number} 当前的进度信息option: {Object} 额外的参数返回值:{ReactNode} 返回文本节点Functionpercent => ${Math.floor(percent)}%
color进度条颜色, 显示优先级: color > progressive > stateString-
backgroundColor背景色String-

代码示例

基本进度条

普通模式的进度条,通过 percent 属性指定进度,通过 textRender 控制右侧文本信息的展示,通过 hasBorder 属性设置组件是否包含边框。

Progress 进度指示器 - 图1

查看源码在线预览

  1. import { Progress } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <Progress percent={30} textRender={() => ''} />
  4. <Progress percent={50} />
  5. <Progress percent={90} />
  6. <Progress percent={40} />
  7. <Progress percent={40} hasBorder size="large" />
  8. </div>, mountNode);

圆形进度条

通过 shape 属性可以改变进度指示器的外观,当取值为 circle 时为圆形进度条。

Progress 进度指示器 - 图2

查看源码在线预览

  1. import { Progress, Icon } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <Progress percent={30} shape="circle" /> &nbsp;&nbsp;
  4. <Progress percent={50} shape="circle" /> &nbsp;&nbsp;
  5. <Progress percent={80} shape="circle" textRender={() => ''}/>&nbsp;&nbsp;
  6. <Progress percent={100} shape="circle" textRender={() => <Icon type="select" size="xl" />} />
  7. </div>, mountNode);

尺寸

可以通过 size 属性制定进度条的大小。

Progress 进度指示器 - 图3

查看源码在线预览

  1. import { Progress } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <Progress percent={30} size="small" />
  4. <Progress percent={50} size="medium" />
  5. <Progress percent={90} size="large" />
  6. <br />
  7. <Progress percent={30} size="small" shape="circle" /> &nbsp;&nbsp;
  8. <Progress percent={50} size="medium" shape="circle" /> &nbsp;&nbsp;
  9. <Progress percent={90} size="large" shape="circle" />
  10. </div>, mountNode);

进度条不同状态

用户可以通过 state 属性自定义当前进度的展现状态,可取值为 normal, success, error 分别表示普通、成功、失败这三种状态。

Progress 进度指示器 - 图4

查看源码在线预览

  1. import { Progress } from '@alifd/next';
  2. ReactDOM.render(<div className="">
  3. <Progress percent={20} shape="circle" state="normal" className="custom-progress" />
  4. <Progress percent={95} shape="circle" state="success" className="custom-progress" />
  5. <Progress percent={95} shape="circle" state="error" className="custom-progress" />
  6. </div>, mountNode);
  1. .custom-progress {
  2. margin: 0 20px;
  3. }

Progressive

当开启 progressive 模式时,Progress 组件会根据自身的进度自动设置展现的颜色值。注意,此时会忽略用户设置的 state 的属性值。

Progress 进度指示器 - 图5

查看源码在线预览

  1. import { Progress } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <Progress percent={20} progressive />
  4. <Progress percent={60} progressive />
  5. <Progress percent={90} progressive />
  6. </div>, mountNode);

颜色

通过 color 属性可以改变进度条的颜色。Progress 有三个API可以改变进度条的颜色,其优先级为 color > progressive > state。

Progress 进度指示器 - 图6

查看源码在线预览

  1. import { Progress, Icon } from '@alifd/next';
  2. ReactDOM.render(<div>
  3. <Progress percent={30} shape="circle" color="#AF5F3C"/> &nbsp;&nbsp;&nbsp;&nbsp;
  4. <Progress percent={50} shape="circle"/>&nbsp;&nbsp;&nbsp;&nbsp;
  5. <Progress percent={90} shape="circle" color="rgba(119,66,141, 0.9)" textRender={() => <Icon type="select" size="xl" />} />
  6. <br /><br />
  7. <Progress percent={30} shape="line" color="rgb(208,16,76)"/>
  8. <Progress percent={50} shape="line"/>
  9. <Progress percent={90} shape="line" color="blue" textRender={() => <Icon type="select" size="medium" />} />
  10. </div>, mountNode);

动态展示

此时为增强模式的进度条,会根据当前进度展示不同的样式。注: css animation完成需要时间, 数据调整过于频繁会导致显示延迟。

Progress 进度指示器 - 图7

查看源码在线预览

  1. import { Progress, Button, Icon } from '@alifd/next';
  2. class CustomProgress extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. percent: 0
  7. };
  8. }
  9. addProgress = () => {
  10. this.setState(prevState => {
  11. return {
  12. percent: prevState.percent + 10
  13. };
  14. });
  15. }
  16. minusProgress = () => {
  17. this.setState(prevState => {
  18. return {
  19. percent: prevState.percent - 10
  20. };
  21. });
  22. }
  23. render() {
  24. const state = this.state;
  25. return (<div>
  26. <div className="progress-panel">
  27. <Button.Group>
  28. <Button onClick={this.minusProgress} disabled={state.percent === 0}><Icon type="minus" /></Button>
  29. <Button onClick={this.addProgress} disabled={state.percent === 100}><Icon type="add" /></Button>
  30. </Button.Group>
  31. </div>
  32. <Progress percent={state.percent} progressive size="large" />
  33. <br /><br />
  34. <Progress percent={state.percent} progressive shape="circle" size="large" />
  35. </div>);
  36. }
  37. }
  38. ReactDOM.render(<CustomProgress />, mountNode);
  1. .progress-panel {
  2. display: flex;
  3. margin-bottom: 14px;
  4. }
  5. .custom-select {
  6. margin-right: 20px;
  7. }

自定义百分比信息

textRender 控制百分比信息的展示,通过自定义textRender个性化百分比渲染. 下面给一个 百分比进度取2位,当达到100%是显示Icon的progressbar.

Progress 进度指示器 - 图8

查看源码在线预览

  1. import { Progress, Icon } from '@alifd/next';
  2. const textRender = percent => {
  3. if (percent === 100) {
  4. return <Icon type="select" size="medium" />;
  5. }
  6. return `${percent.toFixed(2)}%`;
  7. };
  8. ReactDOM.render(<div>
  9. {[1, 2, 3, 4, 5, 6].map((value, index) => <Progress key={index} percent={value / 6 * 100} shape="circle" color={`hsl(${index * 60 + 60}, 90%, 50%)`} textRender={textRender}/>)}
  10. {[1, 2, 3, 4, 5, 6].map((value, index) => <Progress key={index} percent={value / 6 * 100} shape="line" color={`hsl(${index * 60 + 60}, 90%, 50%)`} textRender={textRender}/>)}
  11. </div>, mountNode);

相关区块

Progress 进度指示器 - 图9

暂无相关区块