html5----综合属性图表

实际代码如下:



<html>

<head>

<title>html5 人物属性图</title></head>

<body>

<canvas id="my" width="400" height="400"></canvas>

<script language="javascript" type="text/javascript">

var a = new $attr({

  name : '路飞',

  values : [5,6,7,8,10],

  keys : ['力量','防御','命中','闪避','反击'],

  size : 10

});

a.draw();



function $attr(p){

  var ctx = document.getElementById('my').getContext('2d'), _p = {

    name : '春哥',

    values : [10,10,10,10,10,10,10],

    keys : ['力量','防御','闪避','反击','必杀','命中','格挡'],

    size : 10,

    r : 10

  }

  ctx.clearRect(0,0,400,400);

  ctx.translate(200,200);

  ctx.save();



  this.draw = function(){

    init();

    drawCircle();

    drawLine();

  };



  //等级圆

  function drawCircle(){
  
    ctx.beginPath();

    ctx.strokeStyle = '#c0c0c0';

    for(var i = p.size; i > 0; i--){

      ctx.moveTo(p.r * i, 0);

      ctx.fillText(i,p.r * i, 0);
  
      ctx.arc(0,0,p.r * i,0,Math.PI*2,true);

    }

    ctx.stroke();
  };

  //属性线

  function drawLine(){

    var l = p.keys.length, rad = Math.PI * 2 / p.keys.length;

    ctx.rotate(Math.PI / 2 * 3);

    ctx.beginPath();
  
    ctx.font = 'bold 20px 宋体';

    for(var i = l; i > 0; i--){

      ctx.rotate(rad);

      ctx.moveTo(0,0);

      ctx.lineTo(p.r * p.size,0);

    }

    ctx.stroke();

    drawRange(l,rad);

    drawKeys(l,rad);

  };

  //画区域

  function drawRange(l,rad){

    var x1 = p.values[0] * p.r;

    ctx.beginPath();

    ctx.fillStyle = 'rgba(2,140,253,0.5)';
  
    ctx.strokeStyle = 'black';

    ctx.moveTo(x1,0);

    for(var i = l - 1; i >= 1; i--){

      ctx.rotate(rad);

      ctx.lineTo(p.values[i] * p.r,0);

    }

    ctx.rotate(rad);

    ctx.lineTo(x1,0);

    ctx.stroke();

    ctx.fill();

  };

  //属性名

  function drawKeys(l,rad){

    ctx.fillStyle = 'gray';

    ctx.font = 'bold 10px 宋体';

    ctx.translate(-6,-15);

    ctx.beginPath();

    for(var i = l; i > 0; i--){

      ctx.rotate(rad);

      ctx.save();

      ctx.translate(p.r * p.size + 15,5);

      ctx.rotate(rad * i + Math.PI / 2 - rad);

      ctx.fillText(p.keys[i - 1],0,0);

      ctx.restore();

    }

    ctx.stroke();

  };

  //初始化数据

  function init(){

    for(var a in _p){

      p[a] || (p[a] = _p[a]);

    }

  };

};

</script>

</body>

</html>

  

posted @ 2011-07-15 15:50  ahl5esoft  阅读(377)  评论(0编辑  收藏  举报