热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CSS3制作圆环进度动画效果

CSS3制作圆环进度动画效果.circleprogress{width:160px;height:160px;border:20pxsolidred;borde

CSS3制作圆环进度动画效果
.circleprogress{
width: 160px;
height: 160px;
border:20px solid red;
border-radius: 50%;
}

原文来自http://caibaojian.com/css3-round.html

然后就会说,这很简单嘛。但是如果不是完整圆形的呢?想了想:

.circleprogress{
width: 160px;
height: 160px;
border:20px solid red;
border-left:20px solid transparent;
border-bottom:20px solid transparent;
border-radius: 50%;
}

QjiaEj

然后还是会说,这个也不难啦。可是,如果不是刚好都是45度的倍数呢?

OK,我们先设置一个200x200的方块,然后我们在这里面完成我们的效果:

.circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}

JV3Ijy

接下来我将在这个容器里再放两个矩形,每个矩形都占一半:

<div class="circleProgress_wrapper">
<div class="wrapper right">
<div class="circleProgress rightcircle">div>
div>
<div class="wrapper left">
<div class="circleProgress leftcircle">div>
div>
div>
.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}

.right{
right:0;
}

.left{
left:0;
}

iuqQre

这里重点说一下.wrapper 的overflow:hidden; 起着关键性作用。这两个矩形都设置了溢出隐藏,那么当我们去旋转矩形里面的圆形的时候,溢出部分就被隐藏掉了,这样我们就可以达到我们想要的效果。

html结构也已看到,在左右矩形里面还会各自有一个圆形,先讲一下右半圆:

.circleProgress{
width: 160px;
height: 160px;
border:20px solid transparent;
border-radius: 50%;
position: absolute;
top:0;
}

.rightcircle{
border-top:20px solid green;
border-right:20px solid green;
right:0;
}

beeqeeN

可以看到,效果已经出来了,其实本来是一个半圆弧,但由于我们设置了上边框和右边框,所以上边框有一半溢出而被隐藏了,所以我们可以通过旋转得以还原:

//code from http://caibaojian.com/css3-round.html
.circleProgress{
width: 160px;
height: 160px;
border:20px solid transparent;
border-radius: 50%;
position: absolute;
top:0;
-webkit-transform: rotate(45deg);
}

v6j2ue

所以只要旋转自己想要的角度就可以实现任意比例的进度条。接下来把左半圆弧也实现,变成一个全圆:

.leftcircle{
border-bottom:20px solid green;
border-left:20px solid green;
left:0;
}

iM3Eb2

紧接着,就是让它动起来,原理是这样的, 先让右半圆弧旋转180度,再让左半圆弧旋转180度 ,这样,两个半圆弧由于先后都全部溢出而消失了,所以看起来就是进度条再滚动的效果:

    .rightcircle{
border-top:20px solid green;
border-right:20px solid green;
right:0;
-webkit-animation: circleProgressLoad_right 5s linear infinite;
}

.leftcircle{
border-bottom:20px solid green;
border-left:20px solid green;
left:0;
-webkit-animation: circleProgressLoad_left 5s linear infinite;
}

@-webkit-keyframes circleProgressLoad_right{
0%{
-webkit-transform
: rotate(45deg);
}

50%,100%{
-webkit-transform: rotate(225deg);
}

}
@-webkit-keyframes circleProgressLoad_left{
0%,50%{
-webkit-transform
: rotate(45deg);
}

100%{
-webkit-transform: rotate(225deg);
}

}

7nmQZbZ

当然,我们只需要调整一下角度就可以实现反向的效果:

    .circleProgress{
width: 160px;
height: 160px;
border:20px solid transparent;
border-radius: 50%;
position: absolute;
top:0;
-webkit-transform: rotate(-135deg);
}

@-webkit-keyframes circleProgressLoad_right{
0%{
-webkit-transform
: rotate(-135deg);
}

50%,100%{
-webkit-transform: rotate(45deg);
}

}
@-webkit-keyframes circleProgressLoad_left{
0%,50%{
-webkit-transform
: rotate(-135deg);
}

100%{
-webkit-transform: rotate(45deg);
}

}

fm2YFnu

好的,接下来就是奔向最终效果了,正如我们一开始看到的那样,有点像我们使用360卫士清理垃圾时的类似效果,当然不是很像啦:

    .circleProgress_wrapper{
width: 200px;
height: 200px;
margin: 50px auto;
position: relative;
border:1px solid #ddd;
}

.wrapper{
width: 100px;
height: 200px;
position: absolute;
top:0;
overflow: hidden;
}

.right{
right:0;
}

.left{
left:0;
}

.circleProgress{
width: 160px;
height: 160px;
border:20px solid rgb(232, 232, 12);

推荐阅读
author-avatar
等号拖轮_496
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有