用Raphael在网页中画圆环进度条

条状的进度条我们见得太多了,实现起来比较简单,它总是长方形的,在方形的区域里摆放就不太好看了。随着css3的出现,圆环状的进度条开始用得越来越多,不过由于IE6/7/8不支持css3,我们只能换其它方法来实现。本文就采用Raphael来画一个,这个组件对svg和vml进行了一个统一的封装,根据浏览器使用不同的技术实现绘制,因此IE也能用。


先上效果图:


效果还不错吧?代码其实也不复杂,抛砖引玉一下:




圆形进度条









进度条由两部分组成,首先是底图 progressBg.png,74×74的png图片,把它用Raphael的image方法先画上去:


其次是用Raphael画进度部分,由两条圆弧和两条线段组成,见下图:


先从p1画顺时针圆弧到p2,然后直线到p3,然后逆时针画圆弧到p4,再直线收回p1。之后用渐变色填充一下。以65%时为例,描述这个图形的path如下(基本上就是svg的语法):

M37 69
A31 31 0 1 1 62.079526825623375 19.778657178933337
L58.03444185374863 22.7175834403957
A26 26 0 1 0 37 64
Z


看起来有点吓人,其实分成几部分来看就简单了:

◆ 第一行表示移动到(37, 69)这个点作为起点,也就是p1;
◆ 第二行表示画一段圆弧,就是p1到p2之间的这一段;
◆ 第三行表示画一条直线,就是p2到p3之间的这一段;
第四行表示画一段圆板,已经p3到p4之间的这一段;
第五行表示封闭图形,相当于从p4连回p1;


这其中比较复杂的是圆弧的参数,其参数是这样的:

A rx ry x-axis-rotation large-arc-flag sweep-flag x y


以第一段弧为例,各参数说明如下:

rx和ry:弧的半长轴和半短轴长度,由于我们画的是正圆,所以我们用的都是31;
x-axix-rotation:此段弧的x轴与水平方向夹角,由于我们画的是正圆,所以此参数没用,填了0;
large-arc-flag:大角度弧线还是小角度弧线,简单点说就是画圆的哪半边,1表示大角度。由于我们画的是65%的弧,是比较大的那半个弧,所以填了1。程序里是做了判断的;
sweep-flag:绕中心的方向,1表示顺时针,0表示逆时针。我们的第一段弧是顺时针的,第二段是逆时针的;
x和y:弧的终点坐标;


想深入了解的同学可以参考一下这篇文章:http://www.cnblogs.com/dxy1982/archive/2012/04/06/2395729.html,讲得挺不错的。


PS:如果不需要渐变,直接画一比较粗的圆弧就可以了,要简单得多。
PPS:不一定要画正圆,小修改一下,我们也可以画椭圆形的进度条。


你可能感兴趣的:(用Raphael在网页中画圆环进度条)