采用clip实现圆环加载效果

本文详细解析了如何使用HTML、CSS和JavaScript实现一个动态分数显示的圆环进度条,重点在于通过旋转左右两个半圆来展示不同的分数,并利用clip属性进行精确的可用性隐藏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<style>
.circle {
    width: 60px;
    height: 60px;
    position: absolute;
    border-radius: 50%;
    background: #5397E9;
    right: 0;
}
.pie_left, .pie_right { 
    width: 60px; 
    height: 60px; 
    position: absolute; 
    top: 0;
    left: 0; 
}
.right { 
    display: block; 
    width:60px; 
    height:60px; 
    background:#F0F2F3; 
    border-radius: 50%; 
    position: absolute; 
    top: 0; 
    left: 0; 
    transform: rotate(0deg); 
}
.left { 
    display: block; 
    width:60px; 
    height:60px; 
    background:#F0F2F3; 
    border-radius: 50%; 
    position: absolute; 
    top: 0; 
    left: 0; 
    transform: rotate(0deg); 
}
.pie_right, .right { 
    clip:rect(0,auto,auto,30px); // 裁剪top, right, bottom, left
}
.pie_left, .left { 
    clip:rect(0,30px,auto,0); 
}
.mask {
    width: 52px;
    height: 52px;
    border-radius: 50%;
    left: 4px;
    top: 4px;
    background: #FFF;
    position: absolute;
    text-align: center;
    font-size: 0.1rem;
    color:#00c79c;
}
.score{
    background: rgba(83, 151, 233, 0.12);
    position: absolute;
    width: 42px;
    height: 42px;
    border-radius: 50%;
    top: 5px;
    left: 5px;
}
.score span{
    text-align: center;
}
</style>
<body>
    <div class="circle"> 
        <div class="pie_left"><div class="left"></div></div> 
        <div class="pie_right"><div class="right"></div></div> 
        <div class="mask">
            <div class="score">
                <span>95</span>
            </div>
        </div>
    </div>
</body>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
    $('.circle').each(function() {
        var self=$(this);
        var parts = {
            point : 180,
            deg : self.find('span').text()*3.6,
            rightBar : self.find('.right'),
            leftBar :self.find('.left')
        };
        var timer,i = 0;
        if (parts.deg <= parts.point) {
            parts.rightBar.css({'-webkit-transform':'rotate(0deg)','transform':'rotate(0deg)'});
            timer = setInterval(function(){
                i === parts.deg && (clearInterval(timer));
                parts.leftBar.css({'-webkit-transform':'rotate('+(-i)+'deg)','transform':'rotate('+(-i)+'deg)'});
                i=i+2;
            },i*10);
        } else {
            timer = setInterval(function(){
                if(i > parts.point){
                    clearInterval(timer);
                    i=0;
                    timer = setInterval(function(){
                        i === parts.deg-parts.point && (clearInterval(timer));
                        parts.rightBar.css({'-webkit-transform':'rotate('+(-i)+'deg)','transform':'rotate('+(-i)+'deg)'});
                        i=i+2;
                    },i*10);
                }else{
                    parts.leftBar.css({'-webkit-transform':'rotate('+(-i)+'deg)','transform':'rotate('+(-i)+'deg)'});
                    i=i+2;
                }
            },i*10);
        }
    });
</script>
</html>

clip还可以用于可用性隐藏 

clip: rect(1px 1px 1px 1px); /*left = right, bottom = top*/

现在解释下圆环的实现原理,仅用于个人后面理解

然后通过transform: rotate(0deg)来实现效果

0-100分    每分的旋转角度为(360/100 = 3.6)

1. 小于180, 只需要旋转左边的半圆,右边的半圆css样式为transform: rotate(0deg)

2. 大于180,左边半圆css样式为transform: rotate(-180deg)

 

转载于:https://www.cnblogs.com/luguiqing/p/10189286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值