css如何實現圓形進度條

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
        }

環形旋轉角度換算需要根據不同需求進行微調即可。

如有什么好的建議,歡迎多多交流呀。

網站題目:css如何實現圓形進度條
鏈接分享:http://m.kartarina.com/article26/cpccjg.html

成都網站建設公司_創新互聯,為您提供自適應網站電子商務企業網站制作Google靜態網站云服務器

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管
主站蜘蛛池模板: 97无码人妻福利免费公开在线视频| 亚洲AV永久无码精品一福利| 特级无码毛片免费视频| 亚洲AV色无码乱码在线观看| 亚洲aⅴ天堂av天堂无码麻豆| 国内精品久久人妻无码不卡| 国产成人综合日韩精品无码不卡 | 亚洲午夜无码AV毛片久久| 一区二区三区人妻无码| 亚洲av中文无码乱人伦在线观看| 寂寞少妇做spa按摩无码| 精品韩国亚洲av无码不卡区| 无码国产精品一区二区免费vr| 亚洲国产综合无码一区二区二三区| 亚洲AV无码一区二区乱子伦| 国产成人无码aa精品一区| 免费A级毛片无码视频| 自拍偷在线精品自拍偷无码专区 | 亚洲Av无码国产一区二区| 亚洲成AV人在线观看天堂无码| 国产成人无码精品久久久露脸| 久久久久精品国产亚洲AV无码| 亚洲国产精品无码AAA片| 中文字幕无码久久久| 极品粉嫩嫩模大尺度无码视频| 国产aⅴ激情无码久久久无码| 精品无码国产污污污免费| 亚洲av成人无码网站…| 亚洲日韩精品无码专区加勒比☆ | 国产aⅴ激情无码久久久无码| 亚洲色无码专区一区| 西西大胆无码视频免费| 亚洲av日韩aⅴ无码色老头| 人妻av中文字幕无码专区| 性色av无码不卡中文字幕| 亚洲a无码综合a国产av中文 | 亚洲AV无码乱码国产麻豆穿越 | 亚洲Av永久无码精品黑人| AV无码免费永久在线观看| 无码人妻精品内射一二三AV| 丰满爆乳无码一区二区三区|