溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

用css3如何實(shí)現(xiàn)環(huán)形進(jìn)度條效果

發(fā)布時(shí)間:2020-09-26 10:14:12 來(lái)源:億速云 閱讀:714 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下用css3如何實(shí)現(xiàn)環(huán)形進(jìn)度條效果,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

這種進(jìn)度條適合應(yīng)用于頁(yè)面加載的時(shí)候和環(huán)形計(jì)時(shí)器的頁(yè)面。本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于如何使用css3實(shí)現(xiàn)環(huán)形進(jìn)度條效果,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

如何使用css3實(shí)現(xiàn)條環(huán)進(jìn)度條效果原理

  1. 首先我們需要畫(huà)出圓形進(jìn)度條,但是div格式都是方形的,這就需要用到border-radius將方形轉(zhuǎn)換成圓形。

  2. 圓形的進(jìn)度條一直處于旋轉(zhuǎn)的狀態(tài),我們可以引用css3里面的rotage(deg)語(yǔ)句實(shí)現(xiàn)這一效果。

   3.這里我們?cè)敿?xì)梳理一下rotage(deg)的用法      

a.旋轉(zhuǎn):1.rotateX(deg) //繞x軸旋轉(zhuǎn)

2.rotateY(deg) //繞Y軸旋轉(zhuǎn)

3. rotateZ(deg) //繞Z軸旋轉(zhuǎn)

b.平移:translate(a,b) //在x,y方向平移a,b像素距離。利用translate(-50%,50%)可以實(shí)現(xiàn)居中。

translateX(a) //在X方向平移a的像素距離。

translateY(a)//在Y方向平移a的像素距離。

translateZ(a)//在Z方向平移a的像素距離。

如何使用css3實(shí)現(xiàn)條環(huán)進(jìn)度條效果步驟(代碼)

步驟一:HTML部分

<div class="progress_wrap js_halfClassNameObj">
    <div class="right under">
        <div class="circleProgress rightcircle"></div>
    </div>
    <div class="left under">
        <div class="circleProgress leftcircle"></div>
    </div>
    <div class="right up">
        <div class="circleProgress rightcircle js_progressRight" 
        style="-webkit-transform:rotate('+circleData.rightRotate.toString()+'deg)"></div>
    </div>
    <div class="left up">
        <div class="circleProgress leftcircle js_progressLeft"
         style="-webkit-transform:rotate('+circleData.leftRotate.toString()+'deg)"></div>
    </div>
    //percent小于50時(shí)需要使用遮罩進(jìn)行遮擋超出環(huán)形范圍部分
    <div class="left up_left_cover js_giftLeftCover" style="display:'+circleData.leftCircleDisplay+'">
        <div class="circleProgress leftcircle color_border_t_l04"></div>
    </div>
    <div class="num">
        <div>剩余</div>
        <div class="js_giftPercent">'+circleData.percent+'%</div>
    </div>
</div>

步驟二:css部分

.progress_wrap{
                   position: relative;
                   margin:0 0 0 .14rem;
                   width:.92rem;height:.92rem;
                   //little和more用來(lái)展示黃色和綠色的效果
                   &.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;
                           }
                       }
                       //用遮擋實(shí)現(xiàn)左側(cè)剩余百分比,遮住超出環(huán)形范圍部分;核心是使用同心圓進(jìn)行邊框進(jìn)行遮擋
                       .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;
                               //實(shí)際值為195deg,被遮擋環(huán)顏色值深有光暈,需要將角度進(jìn)行微調(diào)(-191deg)
                               進(jìn)行完全遮擋
                               -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);
            //領(lǐng)取進(jìn)度環(huán)形顏色className
            var halfClassName = percent<50?"little":"more";
            //左半環(huán)遮罩層顯示樣式狀態(tài)
            var leftCircleDisplay = percent<50?"block":"none";
            var leftRotate = 0;
            var rightRotate = 0;
            //以50%為界限;<50%:右半圓占比為0,左半圓需要使用遮罩進(jìn)行遮擋,展示剩余部分
            //           >50%:左半圓占比100%,右半圓直接使用百分比計(jì)算所占部分即可
            //注意:在半圓中計(jì)算百分比時(shí),要將百分比乘以2。
            if(percent<50){
                leftRotate = -15-180+150*(percent*2)/100;   
                rightRotate = -135;
            }else{
                leftRotate = -15;
                rightRotate = -135+(150*((percent-50)*2)/100);   //比例在半環(huán)計(jì)算需要*2倍
            }
            circleData = {
                leftRotate:leftRotate,  //左半環(huán)進(jìn)度
                rightRotate:rightRotate, //右半環(huán)進(jìn)度
                halfClassName:halfClassName, //50% 進(jìn)度環(huán) 變色
                leftCircleDisplay:leftCircleDisplay, //左半環(huán)遮罩
                percent:per  //進(jìn)度百分比
            }
            return circleData
        }

實(shí)現(xiàn)效果如圖所示

用css3如何實(shí)現(xiàn)環(huán)形進(jìn)度條效果

看完了這篇文章,相信你對(duì)用css3如何實(shí)現(xiàn)環(huán)形進(jìn)度條效果有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI