您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關css實現圓形進度條的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
css實現圓形進度條的方法:首先畫一個方形;然后在方形中畫兩個等大均分方形的矩形;最后使用css3的“transform:rotate”屬性將疊加環形根據實際百分比換算成實際的旋轉角度即可。
進度條效果如下:
整圓的效果處理會簡單些,不完整環實現起來細節多點。下邊是實現邏輯和過程。
進度條組成:
環形:兩種顏色進度條,當余量少于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 }
環形旋轉角度換算需要根據不同需求進行微調即可。
關于css實現圓形進度條的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。