基于React封装的占比进度条组件

电池型百分比数据显示React组件

效果图

(注:可以搭配antd的table,嵌入在表格中使用效果最佳)

在这里插入图片描述

源代码



import React, { Component } from 'react';
import PropTypes from 'prop-types';

export default class ProgressBar extends Component {
  constructor(props) {
    super(props);
    this.state = {
      bgColor: '#000',
      progressColor: '#aaa',
    };
  }

  renderProgress() {
    const progressItemStyle = {
      width: `${100 / this.props.nums / 2}%`,
      height: '100%',
      lineHeight: '100%',
      padding: '0px 4px',
      fontWeight: 800,
      // color: `rgb(${this.props.progressColor}`,
    };
    let progressItemLength = this.props.nums * (this.props.data / 100);
    var ele = [];
    for (let i = 0; i < progressItemLength; i++) {
      ele.push(
        <div
          style={Object.assign(progressItemStyle, {
            color: `rgb(${this.props.progressColor}`,
          })}
          key={i}
        >
          /
        </div>,
      );
    }
    return ele;
  }

  componentDidMount() {
    if (this.props.data >= 90) {
      this.setState({ bgColor: '#FFF5F5', progressColor: '#F45A59' });
    } else if (this.props.data >= 80) {
      this.setState({ bgColor: '#FAF5EE', progressColor: '#F5982C' });
    } else if (this.props.data >= 60) {
      this.setState({ bgColor: '#D4E9FA', progressColor: '#2A7CFF' });
    } else {
      this.setState({ bgColor: '#BAEBD0', progressColor: '#2AC870' });
    }
  }
  render() {
    const progressStyle = {
      display: 'flex',
      color: this.state.progressColor,
      // margin: '0 5px',
    };

    const progressArticleStyle = {
      height: '18px',
      width: '78%',
      display: 'flex',
      borderRadius: '10px',
      overflow: 'hidden',
      marginTop: '5px',
      color: this.state.progressColor,
      background: this.state.bgColor,
      border: `1px solid ${this.state.progressColor}`,
    };

    return (
      <div style={progressStyle}>
        <div style={progressArticleStyle}>{this.renderProgress()}</div>
        <div style={{ width: '22%', marginLeft: '5px' }}>
          {this.props.data}%
        </div>
      </div>
    );
  }
}

ProgressBar.propTypes = {
  nums: PropTypes.number.isRequired,
  data: PropTypes.number.isRequired,
};

参数说明

  • data:(0-100的整数),需要显示的百分比数值
  • nums:(默认分割成20个分段),进度条宽度被分隔成多少个电池刻度
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值