css3圆形百分比进度条的实现原理

原文地址:css3圆形百分比进度条的实现原理

今天早上起来在查看jquery插件机制的时候,一不小心点进了css3圆形百分比进度条的相关文章,于是一发不可收拾,开始折腾了。。。

关于圆形圈的实现,想必用2个圆心相同,半径不同的div即可实现。大圆的颜色即为圆形进度条的底色,小圆的颜色即为中间百分比的遮罩颜色白色,还要加上左右2边一边一个半圆,也就是说总共应该有4个div,一个大圆的div中包含3个div,左右一边半个圆,遮罩div处于最上面。

那这里的一边半个圆怎么实现呢?使用css的clip属性即可切图一样的只显示一半,这里稍后详细介绍。

这种实现效果其实是可以的(当百分比不超过50%的时候),当超过以后,就会发现,比如是60%,但进度条显示的是40%,这是为什么呢?因为左右旋转的div没有遮住的缘故,超过了各自所在的范围应该hidden才行,不然多余的部分同样会显示出来。如图所示,当40%的时候正常,当60%的时候是一样的,

那我们是不是还需要额外的2个div,来起到遮盖的作用,来看html代码

<div class="circle">
<div class="pie_left"><div class="left"></div></div>
<div class="pie_right"><div class="right"></div></div>
<div class="mask"><span>10</span>%</div>
</div>

样式:

.circle {
width: 200px;
height: 200px;
position: absolute;
border-radius: 50%;
background: #0cc;
}

.left,.right{
width:200px;
height:200px;
position: absolute;
top: 0px;left: 0px;
}
.pie_left, .pie_right{
width:200px;
height:200px;
position: absolute;
border-radius: 50%;
top: 0px;left: 0px;
background: red;
}

.pie_right,.right {
clip:rect(0,auto,auto,100px);
}
.pie_left , .left{
clip:rect(0,100px,auto,0);
}

/*
*当top和left取值为auto时,相当于0
*当bottom和right取值为auto时,相当于100%
*/
.mask {
width: 150px;
height: 150px;
border-radius: 50%;
left: 25px;
top: 25px;
/*background: #FFF;*/
position: absolute;
text-align: center;
line-height: 150px;
font-size: 16px;
}

  

这里js代码就比较简单了,只需要稍微做一下判断:

$(function(){
if( $(‘.mask span‘).text() <= 50 ){
$(‘.pie_right‘).css(‘transform‘,‘rotate(‘+($(‘.mask span‘).text()*3.6)+‘deg)‘);
}else{
$(‘.pie_right‘).css(‘transform‘,‘rotate(180deg)‘);
$(‘.pie_left‘).css(‘transform‘,‘rotate(‘+(($(‘.mask span‘).text()-50)*3.6)+‘deg)‘);
}
})

  

说明:因为100%对应的是360度,那么50%对应的就是180度,1/3.6度。

再来介绍Clip属性

clip我们常用的就是rect()了,详细介绍请看这篇文章,clip的兼容性也还可以,在兼容基本浏览器。

clip用法

对于一个属性设置为position:absolute;或者position:fixed;的元素设置才有作用。

clip:rect(top,right,bottom,left);

在IE6`7中,把属性之间的逗号去掉即可。

这里的right和bottom值都是相对于left和top的,包含在选中区域内的像素,就会显示出来,其它的都会隐藏。

那要是万一,bottom小于top,right小于left呢?那就整张图片就隐藏了。

还有需要注意的是,

  1. 当left和top取值为auto时,它们的值为0px,
  2. 当right和bottom取值为bottom时,他们默认的值为100%;

这里要认真的理解一下,结合right和bottom值是相对于left和top的。这样应该会好理解一些。

时间: 2025-01-13 01:35:23

css3圆形百分比进度条的实现原理的相关文章

HTML5圆形百分比进度条插件circleChart(记录)

介绍:一款可以描绘圆圈进度条的jQuery插件(可用作统计图) circleChart使用方法 在页面中引入jquery和circleChart.min.js文件. <script src="path/to/jquery.min.js"></script> <script src="path/to/circleChart.min.js"></script> HTML结构 使用一个<div>元素作为该圆形百分

Andorid自定义圆形渐变色进度条的从实现到开源

信自己也是一种信仰. 写在前面的话 3月初我在自定义控件概述中挖下的几个坑,前一段时间已经基本填完了,自定义控件的几种实现方式也分别写了demo来进行说明.今天我们来聊一聊如何把自己封装一个圆形渐变色进度条控件开源到github,并且上传到jcenter方便别人远程依赖.先看下效果图: 连接github并提交新项目 前提条件: 安装Git客户端(下载地址) 有GitHub账号 创建新项目并提交到Github: 在AndroidStudio中新建一个项目 配置Git:Settings -> Ver

在DrawingVisual上绘制圆形的进度条,类似于IOS系统风格。

1.说明:在WPF中,文件下载时需要显示下载进度,由于系统自带的条型进度条比较占用空间,改用圆形的进度条,需要在DrawingVisual上呈现. 运行的效果如图: private Point GetPointOnCir(Point CenterPoint, double r, double angel) { Point p = new Point(); p.X = Math.Sin(angel * Math.PI / 180) * r + CenterPoint.X; p.Y = Center

JS框架_(Progress.js)圆形动画进度条

圆形动画进度条效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> p { position: fixed; top: 50%; left: 0; right: 0; text-align: center; transf

JS框架_(JQbar.js)柱状图动态百分比进度条特效

柱状图动态百分比进度条效果 <html> <head> <title>jqbar.js柱状图动态百分比进度条特效</title> <link href="css/demo.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" href="css/jqbar.css" /

【JavaScript】HTML5/CSS3实现五彩进度条应用

今天要介绍的是一款基于HTML5和CSS3的进度条应用,这款进度条是静态的,仅提供进度条的五彩外观.当然你可以在CSS中动态设置进度值来让其变得动态,一个很好的实现方式是利用jQuery动态改变CSS中的进度值,让进度条实时动起来.具体效果大家可以看演示. 你也可以在这里查看在线演示 接下来我们来分析一下这款进度条的源代码以及实现思路,代码主要由HTML和CSS组成,如果你需要动态改变进度值,也可以自己添加Javascript代码,也是比较简单的. HTML代码: <section class=

如何实现圆形的进度条(ProgressBar)

在我们实际的工作中可能经常使用到圆形的进度条,但是这是怎么实现的呢?其实这只不过是修改了一下ProgressBar的模板,我们在下面的代码中我们将ProgressBar的Value值绑定到Border的Background上面,并且使用了一个ValueToProcessConverter的转换器进行相应地转换,这里重点介绍一下这个转换器 <ProgressBar Name="pb" Minimum="0" Maximum="100" >

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传,避免一次使用内存使用过大的 2 2. Uuid还是原来文件名称:: 2 3. 监听器频繁地被调用 2 4. 结合wz easyui 2 4. 选型 2 5. Uploadify::yash js+flash 3 6. commons-fileupload:: 3 7. COS这个工具O'Reilly公司 3 8. 大的文件上传组件总结 3 5. 林吧实现ui Ajax+jq

HTML5/CSS3实现五彩进度条应用

今天要介绍的是一款基于HTML5和CSS3的进度条应用,这款进度条是静态的,仅提供进度条的五彩外观.当然你可以在CSS中动态设置进度值来让其变得动态,一个很好的实现方式是利用jQuery动态改变CSS中的进度值,让进度条实时动起来.具体效果大家可以看演示. 你也可以在这里查看在线演示 接下来我们来分析一下这款进度条的源代码以及实现思路,代码主要由HTML和CSS组成,如果你需要动态改变进度值,也可以自己添加Javascript代码,也是比较简单的. HTML代码: <section class=