因为项目需要一个环形进度条,所以研究并且参考了下别人的实现,话不多说直接上代码.
1.html
<div class="circle-progress"> <div class="wrapper right"> <div class="circle-progress-bar circle-right"></div> </div> <div class="wrapper left"> <div class="circle-progress-bar circle-left"></div> </div> </div>
2.css
.circle-progress { 120px; height: 120px; position: relative; margin-bottom: 5px; } .circle-progress .wrapper { 50%; height: 100%; position: absolute; top: 0; overflow: hidden; } .circle-progress .wrapper .circle-progress-bar { 200%; height: 100%; box-sizing: border-box; border: 12px solid transparent; border-radius: 50%; position: absolute; top: 0; transform: rotate(45deg); } .circle-progress .wrapper .circle-right { border-top: 12px solid green; border-right: 12px solid green; right: 0; } .circle-progress .wrapper .circle-left { border-bottom: 12px solid green; border-left: 12px solid green; left: 0; } .circle-progress .wrapper-back { 100%; height: 100%; box-sizing: border-box; border-radius: 50%; border: 12px solid #eee; } .circle-progress .right { right: 0; } .circle-progress .left { left: 0; }
效果大概是这样:
此时是100%的情况,利用js方便控制进度.
3.js
function setCircle (dom,percent) { var deg = percent * 360; var reDeg = 0; if(deg >= 180) { reDeg = deg - 315; dom.getElementsByClassName("circle-right")[0].style.transform = "rotate(45deg)"; dom.getElementsByClassName("circle-left")[0].style.transform = "rotate("+reDeg+"deg)"; } else { reDeg = deg - 135; dom.getElementsByClassName("circle-right")[0].style.transform = "rotate("+reDeg+"deg)"; dom.getElementsByClassName("circle-left")[0].style.transform = "rotate(-135deg)"; } }
效果大概是这样
细节再美化下大概是这样,这是项目里的了,就不展示具体代码了.