圆形进度条

今天做一个圆环进度条,html加css,原理很简单,看下面这段代码就知道了

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div{
            display: inline-block;
        }
        *{
            box-sizing: border-box;
        }

        .circle-progress{
            position: relative;
            display: flex;
            width: 150px;
            height: 150px;
            border: 1px solid #000;
        }
        .circle-progress .annulus{
            position: absolute;
            left: 0;
            top: 0;
            border: 20px solid #f00;
            width: 50%;
            height: 100%;
            border-right: none;
            border-top-left-radius: 100px;
            border-bottom-left-radius: 100px;
            transform-origin: right 50%;
        }
        .left-circle{
            animation: rotate_1 3s linear forwards;
        }
        .right-circle{
            animation: rotate_2 6s linear forwards;
        }
        .left-shade{
            position: absolute;
            background-color: #fff;
            left: 0;
            top: 0;
            width: 50%;
            height: 100%;
            animation: hidden_1 0s 3s forwards;
        }
        @keyframes rotate_1 {
            from{
                transform: rotate(0);
            }
            to{
                transform: rotate(180deg);
            }
        }
        @keyframes rotate_2 {
            from{
                transform: rotate(0);
            }
            to{
                transform: rotate(360deg);
            }
        }
        @keyframes hidden_1 {
            from{
                background-color: #fff;
            }
            to{
                background-color: transparent;
            }
        }
    </style>
</head>
<body>
<div class="circle-progress">
    <div class="annulus left-circle"></div>
    <div class="annulus right-circle"></div>
    <div class="left-shade"></div>
</div>
</body>
</html>

为了之后使用方便,下面要做的是将它封装起来,使用时调用一个函数,传入参数就能够实现快慢,是否显示百分比等!!!

下面这段代码包含了圆形进度条的html,css,js可以直接改变css改变样式,也可以直接调用封装好的js方法改变样式,需要的还可以加,当前这个代码不带虚线的进度条,需要虚线进度条可以看我另一篇博客https://blog.csdn.net/qq_40285497/article/details/84100682

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div{
            display: inline-block;
        }
        *{
            box-sizing: border-box;
        }

        .circle-progress{
            position: relative;
            display: flex;
            width: 150px;
            height: 150px;
        }
        .circle-progress .annulus{
            position: absolute;
            left: 0;
            top: 0;
            border: 20px solid #f00;
            width: 50%;
            height: 100%;
            border-right: none;
            border-top-left-radius: 100px;
            border-bottom-left-radius: 100px;
            transform-origin: right 50%;
        }
        .circle-progress .left-circle{
            animation: rotate_1 3s linear forwards;
        }
        .circle-progress .right-circle{
            animation: rotate_2 6s linear forwards;
        }
        .circle-progress .left-shade{
            position: absolute;
            background-color: #fff;
            left: 0;
            top: 0;
            width: 50%;
            height: 100%;
            animation: hidden_1 0s 3s forwards;
        }
        .circle-progress .percent{
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
        }
        @keyframes rotate_1 {
            from{
                transform: rotate(0);
            }
            to{
                transform: rotate(180deg);
            }
        }
        @keyframes rotate_2 {
            from{
                transform: rotate(0);
            }
            to{
                transform: rotate(360deg);
            }
        }
        @keyframes hidden_1 {
            from{
                background-color: #fff;
            }
            to{
                background-color: transparent;
            }
        }
    </style>
</head>
<body>
<div id="circleProgress"></div>

<script>
    function circleProgress(opt) {
        var speed = opt.speed;
        var size = opt.size;
        var borderWidth = opt.borderWidth;
        var needPercent = opt.needPercent;
        var borderColor = opt.borderColor;
        var fontSize = opt.fontSize;
        var fontWeight = opt.fontWeight;
        var fontColor = opt.fontColor;

        //生成图
        var html = '<div class="circle-progress">\n' +
                    '    <div class="annulus left-circle"></div>\n' +
                    '    <div class="annulus right-circle"></div>\n' +
                    '    <div class="left-shade"></div>\n' +
                    '    <div class="percent"></div>\n' +
                    '</div>';
        var box = document.querySelector('#circleProgress');
        box.innerHTML = html;

        //改变速度
        if(speed){
            document.querySelector('#circleProgress .left-circle').style.animation = 'rotate_1 '+speed+'s linear forwards';
            document.querySelector('#circleProgress .right-circle').style.animation = 'rotate_2 '+speed*2+'s linear forwards';
            document.querySelector('#circleProgress .left-shade').style.animation = 'hidden_1 0s '+speed+'s forwards';
        }

        //改变大小
        if(size){
            document.querySelector('#circleProgress .circle-progress').style.width = size+'px';
            document.querySelector('#circleProgress .circle-progress').style.height = size+'px';
            document.querySelectorAll('#circleProgress .annulus')[0].style.borderWidth = size/5+'px';
            document.querySelectorAll('#circleProgress .annulus')[0].style.borderTopLeftRadius = size+'px';
            document.querySelectorAll('#circleProgress .annulus')[0].style.borderBottomLeftRadius = size+'px';
            document.querySelectorAll('#circleProgress .annulus')[1].style.borderWidth = size/5+'px';
            document.querySelectorAll('#circleProgress .annulus')[1].style.borderTopLeftRadius = size+'px';
            document.querySelectorAll('#circleProgress .annulus')[1].style.borderBottomLeftRadius = size+'px';
        }

        //改变边宽
        if(borderWidth){
            document.querySelectorAll('#circleProgress .annulus')[0].style.borderWidth = borderWidth+'px';
            document.querySelectorAll('#circleProgress .annulus')[1].style.borderWidth = borderWidth+'px';
        }

        //改变颜色
        if(borderColor){
            document.querySelectorAll('#circleProgress .annulus')[0].style.borderColor = borderColor;
            document.querySelectorAll('#circleProgress .annulus')[1].style.borderColor = borderColor;
        }

        //显示百分比
        if(needPercent){
            var percent = 0;
            var time = speed*2000/100;
            var percentBox = document.querySelector('#circleProgress .percent');
            var timer = setInterval(function () {
                percent++;
                percentBox.innerText = percent+'%';
                if(percent == 100){
                    clearInterval(timer);
                }
            },time)

            //字体大小
            if(fontSize){
                percentBox.style.fontSize = fontSize + 'px';
            }

            //字体加粗
            if(fontWeight){
                percentBox.style.fontWeight = fontWeight;
            }

            //字体颜色
            if(fontColor){
                percentBox.style.color = fontColor;
            }
        }

    }

    circleProgress({
        speed:1,
        needPercent:true,
        size:200,
        borderWidth:20,
        borderColor:'#0f0',
        fontSize:20,
        fontWeight:600,
        fontColor:'#f00'
    })
</script>
</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值