当前位置:主页 > 聚焦 >

css如何实现圆形进度条

时间:2020-11-16 13:01:46

  css实现圆形进度条的方法:首先画一个方形;然后在方形中画两个等大均分方形的矩形;最后使用css3的“transform:rotate”属性将叠加环形根据实际百分比换算成实际的旋转角度即可。

  

 

  :《css视频教程》

  进度条效果如下:
 

  整圆的效果处理会简单些,不完整环实现起来细节多点。下边是实现逻辑和过程。

  进度条组成:

  环形:两种颜色进度条,当余量少于50%时进度条颜色由绿色变为黄色。进度条结构由两个叠加环形组成;上叠加环形展示剩余量,深色;下叠加环形展示100%总量,浅色。

  样式实现:

  1:画一个方形,如图中阴影部分所示:

2:方形中画两个等大均分方形的矩形,(注意每个矩形一定要设置:overflow:hidden)如图中阴影部分所示:
 

  3:进度条由两个叠加环形组成,所以第一步的方形中需要画四个等大的矩形用来展示不同部分的环形。

  4:每个矩形中画一个和父级方形等大的方形,用来展示环形,左半矩形中的环形只设置上边框和左边框;右半矩形中的环形只设置上边框和右边框,如图中阴影所示:

  5:实现进度条的动态百分比进度,使用css3的transform:rotate将上叠加环形根据实际百分比换算成实际的旋转角度来实现。
当剩余量大于50%时左侧上叠加环形旋转角度不用变,只有计算右测上叠加环形旋转角度即可。
当剩余量小于百分之50%时,左侧上叠加环形旋转时,就会将左半环形展示为完整的半环,此时就需要一个用来遮挡左侧超出进度范围环形部分的左侧环;如下图所示:
 

  html代码如下:

  <p class="progress_wrap js_halfClassNameObj"> <p class="right under"> <p class="circleProgress rightcircle"></p> </p> <p class="left under"> <p class="circleProgress leftcircle"></p> </p> <p class="right up"> <p class="circleProgress rightcircle js_progressRight" style="-webkit-transform:rotate('+circleData.rightRotate.toString()+'deg)"></p> </p> <p class="left up"> <p class="circleProgress leftcircle js_progressLeft" style="-webkit-transform:rotate('+circleData.leftRotate.toString()+'deg)"></p> </p> //percent小于50时需要使用遮罩进行遮挡超出环形范围部分 <p class="left up_left_cover js_giftLeftCover" style="display:'+circleData.leftCircleDisplay+'"> <p class="circleProgress leftcircle color_border_t_l04"></p> </p> <p class="num"> <p>剩余</p> <p class="js_giftPercent">'+circleData.percent+'%</p> </p> </p>

  css代码:

  .progress_wrap{ position: relative; margin:0 0 0 .14rem; width:.92rem;height:.92rem; //little和more用来展示黄色和绿色的效果 &.little{ .under{ .rightcircle,.leftcircle{ border-top:$progress_border_under_little; } .rightcircle{ border-right:$progress_border_under_little; } .leftcircle{ border-left:$progress_border_under_little; } } .up{ .rightcircle,.leftcircle{ border-top:$progress_border_up_little; } .rightcircle{ border-right:$progress_border_up_little; } .leftcircle{ border-left:$progress_border_up_little; } } //用遮挡实现左侧剩余百分比,遮住超出环形范围部分;核心是使用同心圆进行边框进行遮挡 .up_left_cover{ width:.47rem;height:.92rem; .leftcircle{ top:-.02rem; width:.74rem;height:.74rem; border:.11rem solid transparent; border-top:$progress_border_up_left_cover_little; border-left:$progress_border_up_left_cover_little; //实际值为195deg,被遮挡环颜色值深有光晕,需要将角度进行微调(-191deg)进行完全遮挡 -webkit-transform:rotate(-191deg); } } } &.more{ .under{ .rightcircle,.leftcircle{ border-top:$progress_border_under; } .rightcircle{ border-right:$progress_border_under; } .leftcircle{ border-left:$progress_border_under; } } .up{ .rightcircle,.leftcircle{ border-top:$progress_border_up; } .rightcircle{ border-right:$progress_border_up; } .leftcircle{ border-left:$progress_border_up; } } } .right,.left{ position: absolute;top:0;overflow:hidden; width:.46rem;height:.92rem; .circleProgress{ position: absolute; top:0; width: .78rem; height: .78rem; border:.07rem solid transparent; border-radius: 50%; } .rightcircle{ right:0; -webkit-transform: rotate(15deg); } .leftcircle{ left:0; -webkit-transform: rotate(-15deg); } } .right{ right:0; } .left{ left:0; } .num{ position: absolute;left:50%;top:50%; width:.5rem; transform:translate(-50%,-50%); font-size:.12rem;color:$public_auxiliary_col;text-align:center;line-height:.26rem; } }

  js代码:

  function giftCircleProgressFn(per){ var circleData = {}; var percent = parseInt(per); //领取进度环形颜色className var halfClassName = percent<50?"little":"more"; //左半环遮罩层显示样式状态 var leftCircleDisplay = percent<50?"block":"none"; var leftRotate = 0; var rightRotate = 0; //以50%为界限;<50%:右半圆占比为0,左半圆需要使用遮罩进行遮挡,展示剩余部分 // >50%:左半圆占比100%,右半圆直接使用百分比计算所占部分即可 //注意:在半圆中计算百分比时,要将百分比乘以2。 if(percent<50){ leftRotate = -15-180+150*(percent*2)/100; rightRotate = -135; }else{ leftRotate = -15; rightRotate = -135+(150*((percent-50)*2)/100); //比例在半环计算需要*2倍 } circleData = { leftRotate:leftRotate, //左半环进度 rightRotate:rightRotate, //右半环进度 halfClassName:halfClassName, //50% 进度环 变色 leftCircleDisplay:leftCircleDisplay, //左半环遮罩 percent:per //进度百分比 } return circleData }

  环形旋转角度换算需要根据不同需求进行微调即可。
 

  如有什么好的建议,欢迎多多交流呀。

热点推荐
1 Lubin:支持Buterin的以太坊科幻小说项目

消息,Ethereum联合创始人Joseph Lubin为Vitalik Buterin的科幻小说项目辩护,称其为极具沟通能力的人...

2 Bitget恢复IP

消息,Bitget宣布现已开放IP - STORY充提币服务。对于暂停期间给您带来的不便,Bitget深表歉意,...

3 比特币价格稳定在64,000美元,交易者关注

消息,比特币价格在周日稳定在约64,000美元,较周五的抛售回升,但整体区间未发生变化。根...

4 疑似HYPE上币内幕「 HYPE 多仓 TOP 1」:HY

消息,HYPE多单浮盈已收窄至约4093万美元,当前币价为68.34美元,均价为38.68美元,清算价为5...

5 泰国查获315台非法比特币矿机,涉及120万

消息,泰国当局查获了315台非法比特币矿机,这些矿机与一起涉嫌120万美元电力盗窃的案件有...

6 乌克兰再袭俄石油设施终端

消息,俄罗斯地方当局称,乌克兰无人机在俄罗斯克拉斯诺达尔边疆区袭击了一处石油终端,...

7 blockaid:以太坊MEV机器人jaredfromsubway遭攻

消息,安全公司blockaid表示,以太坊知名MEV机器人jaredfromsubway遭攻击,约750万美元资产被盗。攻...

8 Bitget暂停ACE

消息,Bitget宣布,由于钱包维护,自2026年6月21日08:17起暂停ACE - Binance Smart Chain网络的提现功能...

9 以军称收到在黎停火指示,但“安全区”

消息,当地时间20日,以色列国防军表示,以军正继续在黎巴嫩南部安全区内展开军事行动,目...

10 欧盟委员会启动MICA 2.0意见征询,聚焦稳

欧盟委员会于5月启动MICA 2.0框架意见征询,涵盖稳定币、DeFi及预测市场,意见提交截止至8月...

成都来彰科技 蜀ICP备2025134723号-1

资讯来源互联网,如有版权问题请联系管理员删除。