zoukankan      html  css  js  c++  java
  • 利用css3动画和border来实现圆形进度条

    最近在学习前端的一些知识,发现border的功能十分强大啊!

    首先来看看demo

    就是这么一个圆形的进度条,在文本框中输入0-100的数值下面的进度条相应的转到多少

    这个主要是利用border,旋转和css动画来实现的,主要思想是利用两个div来互相遮挡border形成的一个只有半圈有颜色的圆形,再利用旋转div的角度来调整显示

    上代码:

    html+css+js(这里引入了jquery)

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <meta name="KeyWord" content="cicle,learning">
            <meta name="description" content="cicle-learning">
            <meta name="Author" content="alsy">
            <title>圆形进度条</title>
    
            <!-- style-start -->
                
            <!-- style-end -->
    
            <style>
                .content {
                    width: 400px;
                    height: 400px;
                    margin: 10px auto 100px;
                }
                .content .input{
                    position: relative;
                    margin: 40px auto;
                }
                .content .cicle {
                    position: relative;
                    margin: 100px auto;
                    width: 100px;
                    height: 100px;
                    border-width: 20px;
                    border-color: red;
                    border-style: solid;
                    border-radius: 50%;
                }
                .content .cicle .bar {
                    position: absolute;
                    width: 70px;
                    height: 140px;
                    overflow: hidden;
                }
                .content .cicle .bar-left {
                    top: -20px;
                    left: -20px;
                }
                .content .cicle .bar-left .bar-left-an{
                    position: absolute;
                    z-index: 10;
                    width: 100px;
                    height: 100px;
                    border-width: 20px;
                    border-color: transparent transparent green green;
                    border-style: solid;
                    border-radius: 50%;
                    transform: rotate(-135deg);
                }
                .content .cicle .bar-right {
                    top: -20px;
                    left: 50px;
                }
                .content .cicle .bar-right .bar-right-an {
                    position: absolute;
                    left: -70px;
                    z-index: 20;
                    width: 100px;
                    height: 100px;
                    border-width: 20px;
                    border-color: green green transparent transparent;
                    border-style: solid;
                    border-radius: 50%;
                    transform: rotate(-135deg);
                }
                .content .cicle .tx {
                    position: absolute;
                    width: 100px;
                    height: 100px;
                    line-height: 100px;
                    text-align: center;
                    font-size: 20px;
                    font-weight: 800;
                    color: green;
                }
            </style>
    
    
        </head>
        <body>
    
        <div class="content">
            <div class="input">
                <label>进度条:</label><input type="text" id="inp"/>
            </div>
            <div class="cicle">
                <div class="bar bar-left">
                    <div class="bar-left-an"></div>
                </div>
                <div class="bar bar-right">
                    <div  class="bar-right-an"></div>
                </div>
                <div class="tx">0%</div>
            </div>
        </div>
            
    
            <!-- import-js -->
                <script type="text/javascript" src="js/jquery.js"></script>
            <!-- import-my-js -->
                
    
                <script type="text/javascript">
                    $(document).ready(function() {
                        var cicle = cle = function() {
                            
                            var oTx = $(".tx");
    
                            var cicleTransform = function(num, old_num) {
                                var b_l_a = $(".bar-left-an");
                                var b_r_a = $(".bar-right-an");
                                var c_num = num;
                                if(c_num > 50) {
                                    b_r_a.css({
                                        "transform": "rotate(45deg)",
                                        "transition": "transform 1s linear"
                                    });
                                    setTimeout(function() {
                                        b_l_a.css({
                                            "transform": "rotate(" + (((c_num-50)/100*360)-135) + "deg)",
                                            "transition": "transform 1s linear"
                                        });
                                    },1000);
                                } else {
                                    if(old_num > 50) {
                                        setTimeout(function() {
                                            b_r_a.css({
                                                "transform": "rotate(" + ((c_num/100*360)-135) + "deg)",
                                                "transition": "transform 1s linear"
                                            });
                                        },1000);
                                        b_l_a.css({
                                            "transform": "rotate(-135deg)",
                                            "transition": "transform 1s linear"
                                        });
                                    } else {
                                        b_r_a.css({
                                            "transform": "rotate(" + ((c_num/100*360)-135) + "deg)",
                                            "transition": "transform 1s linear"
                                        });
                                    }
                                    
                                }
                            }
    
                            var setnum = function(num) {
                                oTx.text(num + "%");
                            }
    
                            var getnum = function() {
                                return parseInt(oTx.text());
                            }
    
                            var inputB = function() {
                                $("#inp").blur(function() {
                                    var num = parseInt($.trim( $(this).val() ));
                                    if(num>=0 && num <= 100){
                                        cicleTransform(num, getnum());
                                        setnum(num);
                                    }else{
                                        alert("输入100以内的数值!");
                                    }
                                });
                            }
                            
                            return {
                                init: function() {
                                    inputB();
                                }
                            }
                        }();
                        cicle.init();
                    });
                </script>
        </body>
    </html>
  • 相关阅读:
    微信小程序实战练习(仿五洲到家微信版)
    vue2.0项目 calendar.js(日历组件封装)
    基于thinkphp的后台管理系统模板快速搭建
    你不知道的javascript(上卷)读后感(二)
    你不知道的javascript(上卷)读后感(一)
    教你10分钟搭建酷炫的个人博客
    Webpack学习-工作原理(下)
    Webpack学习-工作原理(上)
    Css Secret 案例Demo全套
    基于excel导入数据到ms sql server
  • 原文地址:https://www.cnblogs.com/alsy/p/5024727.html
Copyright © 2011-2022 走看看