Progress 进度

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

安装方法

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

Guide

展示操作的当前进度。

何时使用

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

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

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

API

进度

参数说明类型默认值
prefix样式的品牌前缀String'next-'
shape形态可选值:'circle', 'line'Enum'line'
type类型可选值:'normal', 'progressive'Enum'normal'
size尺寸可选值:'small', 'medium', 'large'Enum'medium'
percent所占百分比Number0
suffix进度条上的说明内容ReactNode-
showInfo是否展示内容Booleantrue
state状态可选值:'success', 'error'Enum-
className自定义样式名String-
animation是否开启动效Booleantrue

代码示例

基本进度条

普通模式的进度条,通过 showInfo 属性控制是否显示右侧的文本信息。

Progress 进度 - 图1

查看源码在线预览

  1. import { Progress } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Progress percent={30} />
  5. <Progress percent={50} />
  6. <Progress percent={90} />
  7. <Progress percent={40} showInfo={false} />
  8. </div>,
  9. mountNode
  10. );

圆形进度条

State 目前支持两种不同类型的进度条,分别是条状进度条和圆形进度条。可以通过 shape 属性来控制。

Progress 进度 - 图2

查看源码在线预览

  1. import { Progress } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <Progress percent={30} shape="circle" /> &nbsp;&nbsp;
  5. <Progress percent={50} shape="circle" /> &nbsp;&nbsp;
  6. <Progress percent={90} shape="circle" /> &nbsp;&nbsp;
  7. <Progress percent={40} shape="circle" showInfo={false} />
  8. </div>,
  9. mountNode
  10. );

动态展示

type 取值为 progressive,此时为增强模式的进度条,会根据当前进度展示不同的样式

Progress 进度 - 图3

查看源码在线预览

  1. import { Progress, Button, Select } from "@icedesign/base";
  2. class CustomProgress extends React.Component {
  3. constructor(props) {
  4. super(props);
  5. this.state = {
  6. percent: 0,
  7. shape: "circle",
  8. type: "progressive",
  9. size: "medium"
  10. };
  11. }
  12. startProgress() {
  13. if (this.interval) {
  14. clearInterval(this.interval);
  15. }
  16. this.interval = setInterval(() => {
  17. if (this.state.percent > 99) {
  18. clearInterval(this.interval);
  19. }
  20. this.setState(prevState => {
  21. const current =
  22. prevState.percent + 15 > 100 ? 100 : prevState.percent + 15;
  23. return { percent: current };
  24. });
  25. }, 500);
  26. }
  27. stopProgress() {
  28. if (this.interval) {
  29. clearInterval(this.interval);
  30. }
  31. this.setState({ percent: 0 });
  32. }
  33. onChangeShape(val) {
  34. this.setState({
  35. shape: val
  36. });
  37. }
  38. onChangeType(val) {
  39. this.setState({
  40. type: val
  41. });
  42. }
  43. onChangeSize(val) {
  44. this.setState({
  45. size: val
  46. });
  47. }
  48. render() {
  49. const state = this.state;
  50. return (
  51. <div>
  52. <div className="progress-panel">
  53. <Select
  54. onChange={this.onChangeShape.bind(this)}
  55. className="custom-select"
  56. placeholder="选择进度条的外观"
  57. >
  58. {["circle", "line"].map((item, index) => (
  59. <Select.Option key={index} value={item}>
  60. {item}
  61. </Select.Option>
  62. ))}
  63. </Select>
  64. <Select
  65. onChange={this.onChangeType.bind(this)}
  66. className="custom-select"
  67. placeholder="请选择进度条的类型"
  68. >
  69. {["normal", "progressive"].map((item, index) => (
  70. <Select.Option key={index} value={item}>
  71. {item}
  72. </Select.Option>
  73. ))}
  74. </Select>
  75. <Select
  76. onChange={this.onChangeSize.bind(this)}
  77. className="custom-select"
  78. placeholder="请选择进度条的尺寸"
  79. >
  80. {["small", "medium", "large"].map((item, index) => (
  81. <Select.Option key={index} value={item}>
  82. {item}
  83. </Select.Option>
  84. ))}
  85. </Select>
  86. <Button.Group>
  87. <Button
  88. onClick={this.startProgress.bind(this)}
  89. disabled={state.percent > 0}
  90. >
  91. 开始
  92. </Button>
  93. <Button
  94. onClick={this.stopProgress.bind(this)}
  95. type="primary"
  96. disabled={state.percent === 0}
  97. >
  98. 归零
  99. </Button>
  100. </Button.Group>
  101. </div>
  102. <Progress
  103. percent={state.percent}
  104. type={state.type}
  105. shape={state.shape}
  106. size={state.size}
  107. />
  108. </div>
  109. );
  110. }
  111. }
  112. ReactDOM.render(<CustomProgress />, mountNode);
  1. .progress-panel {
  2. display: flex;
  3. margin-bottom: 14px;
  4. }
  5. .custom-select {
  6. margin-right: 20px;
  7. }

自定义展示内容

可以通过 Suffix 属性传入您想要的展示的文本内容。

Progress 进度 - 图4

查看源码在线预览

  1. import { Progress, Icon } from "@icedesign/base";
  2. const successPrefix = (
  3. <Icon type="select" size="xl" style={{ color: "green" }} />
  4. );
  5. const errorPrefix = <Icon type="close" size="xl" style={{ color: "red" }} />;
  6. ReactDOM.render(
  7. <div>
  8. <Progress percent={66} shape="circle" state="error" suffix={errorPrefix} />{" "}
  9. &nbsp;&nbsp;
  10. <Progress
  11. percent={100}
  12. shape="circle"
  13. state="success"
  14. suffix={successPrefix}
  15. />
  16. </div>,
  17. mountNode
  18. );

尺寸

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

Progress 进度 - 图5

查看源码在线预览

  1. import { Progress } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div>
  4. <h3>不同尺寸的进度条</h3>
  5. <Progress percent={30} size="small" />
  6. <Progress percent={50} size="medium" />
  7. <Progress percent={90} size="large" />
  8. <br />
  9. <h3>不同尺寸的圆形进度条</h3>
  10. <Progress percent={30} size="small" shape="circle" /> &nbsp;&nbsp;
  11. <Progress percent={50} size="medium" shape="circle" /> &nbsp;&nbsp;
  12. <Progress percent={90} size="large" shape="circle" />
  13. </div>,
  14. mountNode
  15. );

进度条不同状态

当您不设置 state 属性的值时,或者不提供 state 属性值时,Progress 处于常规状态。Progress 组件支持三种状态的展示,分别是常规状态、成功状态,和失败状态。您可以通过 state 属性展示流程的不同周期。

Progress 进度 - 图6

查看源码在线预览

  1. import { Progress } from "@icedesign/base";
  2. ReactDOM.render(
  3. <div className="">
  4. <Progress percent={20} shape="circle" className="custom-progress" />
  5. <Progress
  6. percent={95}
  7. state="success"
  8. shape="circle"
  9. className="custom-progress"
  10. />
  11. <Progress
  12. percent={95}
  13. state="error"
  14. shape="circle"
  15. className="custom-progress"
  16. />
  17. </div>,
  18. mountNode
  19. );
  1. .custom-progress {
  2. margin: 0 20px;
  3. }

相关区块

Progress 进度 - 图7

暂无相关区块