使用Raphaël类库实现的超酷动画技能图表

 
申请达人,去除赞助商链接

在线演示

原文链接:http://www.gbtags.com/gb/share/5828.htm

在这篇文章中GBin1将介绍如何使用Raphaël这个js类库构建图表。Raphaël是一个非常小的js类库用于构建丰富的矢量图形。

这个图形的创意非常简单,我们使用一些圆弧来展示一个技能百分比数值到一个主圆周中,当我们将鼠标挪到对应的圆弧,将显示对应的技能百分比并且产生对应特效。

HTML标签

HTML代码结构包括一个命名为"get"的主容器标签。这个容器包括了所有的用于展现图形的数据。然后我们创建一个新的名字叫"diagram"的div元素,这个元素用来作为生成圆弧的容器,代码如下:

  1. <divid="diagram"></div>
  2. <divclass="get">
  3. <divclass="arc">
  4. <spanclass="text">jQuery</span>
  5. <inputtype="hidden"class="percent"value="95"/>
  6. <inputtype="hidden"class="color"value="#97BE0D"/>
  7. </div>
  8. <divclass="arc">
  9.  
  10. <spanclass="text">CSS3</span>
  11. <inputtype="hidden"class="percent"value="90"/>
  12. <inputtype="hidden"class="color"value="#D84F5F"/>
  13. </div>
  14. <divclass="arc">
  15. <spanclass="text">HTML5</span>
  16. <inputtype="hidden"class="percent"value="80"/>
  17. <inputtype="hidden"class="color"value="#88B8E6"/>
  18.  
  19. </div>
  20. <divclass="arc">
  21. <spanclass="text">PHP</span>
  22. <inputtype="hidden"class="percent"value="53"/>
  23. <inputtype="hidden"class="color"value="#BEDBE9"/>
  24. </div>
  25. <divclass="arc">
  26. <spanclass="text">MySQL</span>
  27. <inputtype="hidden"class="percent"value="45"/>
  28. <inputtype="hidden"class="color"value="#EDEBEE"/>
  29. </div>
  30. </div>
 

 

CSS样式定义

在这个演示的样式表我们只定义如下:

1. 隐藏class为'get'的元素

2. 设置id为'diagram'的元素宽度和高度

  1. .get{
  2. display:none;
  3. }
  4.  
  5. #diagram {
  6. float:left;
  7. width:600px;
  8. height:600px;
  9. }

 

Javascript

主要方法是创建一个新的Raphaël对象(变量为'r'),然后画出我们到一个圆形,使用我们指定的半径'rad'。

然后我们在创建的Raphaël对象中创建一个新的圆形。我们使得圆形居中,并且添加一些文字。

  1. var o ={
  2. init:function(){
  3. this.diagram();
  4. },
  5. random:function(l, u){
  6. returnMath.floor((Math.random()*(u-l+1))+l);
  7. },
  8. diagram:function(){
  9. var r =Raphael('diagram',600,600),
  10. rad =73;
  11.  
  12. r.circle(300,300,85).attr({ stroke:'none', fill:'#193340'});
  13.  
  14. var title = r.text(300,300,'Skills').attr({
  15. font:'20px Arial',
  16. fill:'#fff'
  17. }).toFront();
  18.  
  19. }
  20. }
 

 

接下来我们更深入一些。

我们将扩展Raphaël对象,使用一些自定义的属性:

  • alpha - 圆弧的度数
  • random - 指定的随机数
  • sx,sy - 起始的位置
  • x,y - 结束位置
  • path
  1. var o ={
  2. init:function(){
  3. this.diagram();
  4. },
  5. random:function(l, u){
  6. returnMath.floor((Math.random()*(u-l+1))+l);
  7. },
  8. diagram:function(){
  9. var r =Raphael('diagram',600,600),
  10. rad =73;
  11.  
  12. r.circle(300,300,85).attr({ stroke:'none', fill:'#193340'});
  13.  
  14. var title = r.text(300,300,'Skills').attr({
  15. font:'20px Arial',
  16. fill:'#fff'
  17. }).toFront();
  18.  
  19. r.customAttributes.arc =function(value, color, rad){
  20. var v =3.6*value,
  21. alpha = v ==360?359.99: v,
  22. random = o.random(91,240),
  23. a =(random-alpha)*Math.PI/180,
  24. b = random *Math.PI/180,
  25. sx =300+ rad *Math.cos(b),
  26. sy =300- rad *Math.sin(b),
  27. x =300+ rad *Math.cos(a),
  28. y =300- rad *Math.sin(a),
  29. path =[['M', sx, sy],['A', rad, rad,0,+(alpha >180),1, x, y]];
  30. return{ path: path, stroke: color }
  31. }
  32.  
  33. $('.get').find('.arc').each(function(i){
  34. var t = $(this),
  35. color = t.find('.color').val(),
  36. value = t.find('.percent').val(),
  37. text = t.find('.text').text();
  38.  
  39. rad +=30;
  40. var z = r.path().attr({ arc:[value, color, rad],'stroke-width':26});
  41.  
  42. z.mouseover(function(){
  43. this.animate({'stroke-width':50, opacity:.75},1000,'elastic');
  44. if(Raphael.type !='VML')//solves IE problem
  45. this.toFront();
  46. title.animate({ opacity:0},500,'>',function(){
  47. this.attr({ text: text +'n'+ value +'%'}).animate({ opacity:1},500,'<');
  48. });
  49. }).mouseout(function(){
  50. this.animate({'stroke-width':26, opacity:1},1000,'elastic');
  51. });
  52. });
  53. }
  54. }

 

然后我们取得所有需要的数据,例如,百分比,弧度颜色,及其文字。我们给每一个弧度添加半径数值最后创建一个新的圆弧path。最后一步我们添加鼠标hover的动画效果。当鼠标悬浮到圆弧时,标题会改变(即圆圈里的内容)。同时我们让圆弧变大一些。

今天我们介绍了 Raphaël的类库,如果大家有兴趣,可以去类库的网站查看更多的例子: Raphaël主站

更多内容请见原文链接:http://www.gbtags.com/gb/share/5828.htm

 

 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值