canvas简易雷达图

前言

使用canvas来绘制,无动画过程的版本,支持圆形和线条,支持多角,但数值位置定位不够精确可供参考。

准备

回顾一下类的使用,打算用类来实现一个

class CanvasCapabilityMap {
  // 构造函数
  constructor(mapRef, mapOption) {
    this.mapOption = mapOption
    this.mapRef = mapRef
  }
  // 类方法
  initCapabilityMap() {
  }
}

const canvasMap = new CanvasCapabilityMap(); 
canvasMap.initCapabilityMap(list)

再看一眼canvas

const ctx = canvas.getContext('2d') // 获取画笔
ctx.beginPath(); // 开始路径
ctx.moveTo(0, 0) // 移动到开始位置
ctx.lineTo(x, y) // 画线
ctx.closePath(); // 结束路径
ctx.stroke(); // 描边
ctx.fill(); // 填充

// 画圆/圆弧  
// x,y表示圆弧的圆心坐标;
// radius表示圆弧的半径;
// startAngle表示圆弧的起始弧度,与x轴正方向的夹角;
// endAngle表示圆弧的终止弧度,与x轴正方向的夹角;
// anticlockwise表示是否逆时针,取值为true或false。
ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
开整

画个圆

 // 画虚线圆
    drawDashRound (x, y, radius, step, ctx) {
        const count = Math.floor(360 / step);
        step = step / 180 * Math.PI * 2;
        for (let b = 0, e = step / 2; e <= 360; b += step, e += step) {
            ctx.beginPath()
            ctx.arc(x, y, radius, b, e);
            ctx.stroke();
        }
    }
    // 画实线圆
    drawArc(half, r, ctx) {
        ctx.beginPath();
        ctx.arc(half, half, r, 0, 2*Math.PI)
        ctx.stroke();
        ctx.closePath();
    }


获取圆弧上的点的位置(能力形状)

// 圆等分半径点
    getPoint(r, sx, sy, count){
      let point = [];
      let radians = (Math.PI / 180) * Math.round(360 / count);
      for(let i = 0; i < count; i++){
          let x = sx + r * Math.sin(radians * i),
              y = sy + r * Math.cos(radians * i);
   
          point.push({ x, y } ); 
      }
      return point
    }


加上连线,再加上一点点细节。

https://code.juejin.cn/pen/7293344829604364338

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值