网上有各种进度,进度条啊,进度环,进度条做起来简单,可是有很多时候需要的是进度环,本篇是用css3的效果结合js完成进度环的。
废话不多说了,上结构
html:
1 2 3 4 5
| <div class="loading"> <div class="left"><span></span></div> <div class="right"><span></span></div> <div class="progress"><span>0</span>%</div> </div>
|
大概结构是这样的(图烂勿怪,我画图烂的有一手,(ノへ ̄、)
)
css:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| .loading{ margin: 10px auto; width: 150px; height: 150px; position: relative; background-color: #FFF; } .progress{ position: absolute; top: 50%; left: 50%; width: 130px; height: 130px; transform: translate(-50%,-50%); color: red; line-height: 130px; text-align: center; background-color: #FFF; border-radius: 50%; } .left,.right{ float: left; width: 50%; height: 100%; position: relative; overflow: hidden; } .left span,.right span{ display: block; position: absolute; width: 100%; height: 100%; background-color: red; transition: all 0.4s; } .left span{ border-radius:150px 0 0 150px; transform-origin: right; } .right span{ border-radius:0 150px 150px 0; transform-origin: left; }
|
主要的原理就是让.left
,.right
的span
通过transform: rotateZ
旋转角度,一开始.left span
旋转180度到.right
那边,然后通过overflow: hidden
使其超过的隐藏,此时.left span
完全在.left
外面,完全隐藏了,然后通过减小.left span
的旋转角度,让其在.left
中显现出来,.right span
同理。其实本来显示的会是一个扇形,但是由于有.progress
这个白色的圆覆盖在.loading
上面,就变成了圆环。
实现效果如下,可以在输入框输入:(本人对颜色极其不敏感,红色不好看就不要吐槽了,自己改)
本文代码地址:链接