CSS3实现圆形进度条
介绍
闲来无事,去了CSS3Plus网站逛了逛,发现了一个很有意思的实现--css3实现进度条。粗略看了下代码,发现原理其实很简单,不难理解。
现在在此讲述下原理并实现一个1s更新的进度条。
技术细节是这样的:进度条由两个半圆环组成,首先我们的任务是实现左右两个半圆环。圆环可以用border-radius实现,这样就意味着该方
法不兼容IE8.可以使用clip来完成对整圆环的剪切;使用rotate函数完成圆环的旋转,通过设置两个半圆环的旋转角度来实现不同进度值的显示。
clip属性是css2属性,所有的浏览器都支持该属性。对于clip有几个要点需要注意:首先,使用clip属性的元素必须是绝对定位或者固定定位的
元素,也就是说必须脱离文档流;其次,clip可以使用的函数目前只有rect(top,right,bottom,left),该函数传递4个值,其中top为裁剪区域距离
元素顶端的距离,设为auto时默认为0,right为裁剪区域距离元素左端(左边框)的值,auto时默认为元素的最右端,bottom为裁剪区域距离元
素顶端的值,auto时默认为元素最底端,left为距离元素左边的距离,auto时默认为0.
实现
.wrap{position: relative;width: 200px;height:200px;border-radius: 50%;background: #CCFFFF;text-align: center;}
.right-part{width:200px;height: 200px;position: absolute;clip:rect(0px,auto,auto,100px)}
.right{width: 200px;height:200px;position: absolute;border-radius: 50%;background: #003366;
clip:rect(0px,auto,auto,100px);}
.r-shadow{width: 150px;height:150px;border-radius: 50%;background: #fff;position: absolute;
left:25px;top:25px;}
.left-part{width:200px;height: 200px;position: absolute;clip:rect(0px,100px,auto,0px)}
.left{width: 200px;height:200px;position: absolute;border-radius: 50%;background: #003366;
clip:rect(0px,100px,auto,0px);}
.l-shadow{width: 150px;height:150px;border-radius: 50%;background: #fff;position: absolute;
left:25px;top:25px;}
#desc{display:inline-block;width:200px;height:200px;line-height: 200px;font-size: 56px;position: absolute;
left:;}
<div class="wrap">
<div class="right-part">
<div class="right" id="right"></div>
<div class="r-shadow"></div>
</div>
<div class="left-part">
<div class="left" id="left"></div>
<div class="l-shadow"></div>
</div>
<span id="desc">ad</span>
</div>
function progressBar(percentage){
var p = Math.round(percentage * 100);
var deg = p * 3.6;
var right = document.getElementById("right"),
left = document.getElementById("left"),
desc = document.getElementById("desc");
if(p > 100 || p < 0) p = 100;
if(deg <= 180){
right.style.cssText = "transform:rotate("+(deg-180)+"deg);"
left.style.cssText = "background:#CCFFFF;"
}else{
right.style.cssText = "transform:none;"
left.style.cssText = "background:#003366;transform:rotate("+(deg-360)+"deg);"
}
if(desc.innerText){
desc.innerText = p+"%"
}
if(desc.textContent){
desc.textContent = p+"%";
}
}
var g = 0;
setTimeout(function _a(){
if(g>1)return;
progressBar(g);
g += 0.1
setTimeout(_a,1000)
},1000)
CSS3实现圆形进度条的更多相关文章
- 移动端纯CSS3制作圆形进度条所遇到的问题
近日在开发的页面中,需要制作一个动态的圆形进度条,首先想到的是利用两个矩形,宽等于直径的一半,高等于直径,两个矩形利用浮动贴在一起,设置overflow:hidden属性,作为盒子,内部有一个与其宽高 ...
- 纯CSS3实现圆形进度条动画
悄悄地,GIF 格式的进度条已经越来越少,CSS 进度条如雨后春笋般涌现.今天要介绍的这个 CSS3 进度条,效果和 Flyme OS 4 上的加载动画一样. 首先,来看下最终的效果: 它的 HTML ...
- 利用css3动画和border来实现圆形进度条
最近在学习前端的一些知识,发现border的功能十分强大啊! 首先来看看demo 就是这么一个圆形的进度条,在文本框中输入0-100的数值下面的进度条相应的转到多少 这个主要是利用border,旋转和 ...
- vue 圆形进度条组件解析
项目简介 本组件是vue下的圆形进度条动画组件 自由可定制,几乎全部参数均可设置 源码简单清晰 面向人群 急于使用vue圆形进度条动画组件的同学.直接下载文件,拷贝代码即可运行. 喜欢看源码,希望了解 ...
- android 自定义控件——(四)圆形进度条
----------------------------------↓↓圆形进度条(源代码下有属性解释)↓↓---------------------------------------------- ...
- WPF 实现圆形进度条
项目中用到圆形进度条,首先就想到使用 ProgressBar 扩展一个,在园子里找到迷途的小榔头给出的思路和部分代码,自己加以实现. 进度小于60显示红色,大于60则显示绿色.效果如下: 基本思路: ...
- html5 svg 圆形进度条
html5 svg 圆形进度条 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- canvas圆形进度条
通过定义一个canvas标签, new方法传进ID值,和旋转角度值,即可生成圆形进度条 <!DOCTYPE html> <html lang="en"> & ...
- iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
随机推荐
- 【hihoCoder】1288 : Font Size
题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...
- jquery 购物车飞入效果
github https://github.com/amibug/fly demo https://github.com/amibug/fly
- 搭建spark环境
1.wget http://www.apache.org/dyn/closer.cgi/spark/spark-1.2.0/spark-1.2.0-bin-hadoop2.4.tgz
- TreeView 使用方法:(在View.Details模式下)
1.建立TreeView的標題 2.建立TreeView的Item 3.在TreeView的Item中的建立SubItem 如果將各部 ...
- 使用Dotfuscator 进行.Net代码混淆 代码加密的方法
混淆代码能在一定程度上放置代码被盗用,保护我们的知识产权 1.打开vs2012,选择工具-〉Dotfuscator Software Services 2.选择你需要混淆的DLL 文件,可以多选择 3 ...
- 简单的jQuery幻灯片实现
一.一些抱怨 自从国庆放假上班以来,又是忙碌的工作直到现在,但是说忙好像也没有加几天班,只是上班的时候工作排的挺满.但是别人貌似一直都不太忙(也是我自己觉得),感觉就很不爽. 我喜欢快速做完一件事,然 ...
- 我的面板我做主 -- 淘宝UWP中自定义Panel的实现
在Windows10 UWP开发平台上内置的XMAL布局面板包括RelativePanel.StackPanel.Grid.VariableSizedWrapGrid 和 Canvas.在开发淘宝UW ...
- 体验了微信小程序,发现安卓用户终于把果粉“碾压”了一次
今天早上,张小龙在微信公开课上分享了小程序的理念,并且公布了小程序将于1月9日上线. 为了体现张小龙对未来程序形态的理解,小程序有四个特定:无需安装.触手可及.用完即走.无需卸载.今天,36氪刚好有机 ...
- @OutputCache 详解-文章目录
OutputCache概念学习 OutputCache属性详解(一)一Duration.VaryByParam OutputCache属性详解(二)一 Location OutputCache属性详解 ...
- SQL 2014 AlwaysOn 搭建
AlwaysOn底层依然采用Windows 故障转移群集的机制进行监测和转移,因此也需要先建立Windows Cluster,只不过可用性组中的数据库不一定非要再存放在共享存储上了.可以是存储在本地磁 ...