1.需求
在项目开发时,要展示一个操作的进度条,比如:要实现一个文件的上传下载进度条,或者实现类似拼夕夕砍一刀进度条,怎么实现呢?效果图如下:
对上面效果图说明:
进度条底色为棕黑色(#043330,或者自定义一个进度条图片),进度条为黄色(#f1e60a,或者自定义一个进度条图片),比如:
进度条里面的文案颜色为白色(#fff)
2.实现
把上面需要实现的功能写成一个组件,页面直接调用该组件即可,代码如下:
要引入组件页面的代码:
import React, {useState} from "react";
import axios from "axios";
import Scroll from "../../components/Scroll";
const Index = () => {
//进度条要达到的总值
const [proTotal,setProTotal] = React.useState(500);
//进度条当前的值
const [proCur,setProCur] = React.useState(500);
useEffect(() => {
//通过api接口从服务端获取配置参数
let result = await axios({
method: "post",
url: "服务端apiurl地址",
data: JSON.stringify({
"服务端请求api接口",
{"请求参数名": "请求参数值"},
}),
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
},
});
//设置配置
setProTotal(result.proTotal);
setProCur(result.proCur);
});
return (
<div class={style.main}>
<Progress
width="100%"
height={"0.73rem"}
borderRadius={"1.2rem"}
percentage={(preCur / proTotal) * 100}
textColor={"#fff"}
fontSize={"0.6rem"}
progressColor={"#f1e60a"}
backgroundColor={"#043330"}
text={`${reCur} / ${proTotal}`}
/>
</div>
)
}
export default Index;
对上面Progress参数说明:
width: 进度条宽度,
height:进度条高度,
borderRadius:进度条边框圆弧半径,
percentage:进度条百分比(主要用于显示黄色进度条多少),
textColor:进度条中间说明文案颜色,
text:进度条中间的文案说明
fontSize:进度条中间说明文案字体大小,
progressColor:进度条颜色:
可以是颜色二进制,还可以是一张图片,比如:
progressColor={"#f1e60a"}
progressColor={""url('../images/progrssCplor.png') 100%"} (图片如上面所示)
backgroudColor:进度条背景色:同progressColor一样
组件:
import React from "react";
const Progress = ({
percentage,
width,
height,
borderRadius,
backgroundColor,
fontSize,
textColor,
text
}) => {
return (
<div style={{ width, height, borderRadius, backgroundColor, overflow: "hidden" }}>
<div
style={{
width: "100%",
height: "100%",
textAlign: "center",
display: "flex",
justifyContent: "center",
alignItems: "center",
}}
>
<span
style={{
fontSize,
fontWeight:700,
color: textColor,
}}
>
{text}
</span>
</div>
<div style={{ background: progressColor,backgroundSize: `${100}% ${percentage}%`, marginTop: `-${height}`, height, width: `${percentage}%`, borderRadius: borderRadius }} />
</div>
);
};
export default Progress;
对上面代码说明:
Progress中的参数为请求组件时传入的参数,
第一个div是进度条底图div,
第二个div是进度条中间文案div,
第三个div是进度条进度div
好了,进度条代码组件就好了,当然,也可以参考react-vant的Progress 进度条 组件进行开发