微信小程序"蜘蛛网"雷达图

惯例上图


主要代码:

/**

  * 生命周期函数--监听页面加载

  */

  onLoad: function (options) {

    const ctx = wx.createCanvasContext('myCanvas')

    this.drawInnerShape(ctx, 100, 150, 150, 10, 20)

    var levelArray = new Array(1, 3, 2, 4, 3, 2,2,1,4,3)

    this.drawCentRect(ctx, levelArray)

    this.drawText()

    ctx.draw()

  },

  drawShape: function (ctx, radius, x, y, lines) {

    if (lines < 3) {

      throw new Error("多边形边数不能小于3")

    }

    ctx.beginPath()

    var array = new Array(lines)

    for (var i = 0; i < lines; i++) {

      var hudu = 2 * Math.PI / lines * i;

      var innerX = x + radius * Math.sin(hudu)

      var innerY = y + radius * Math.cos(hudu)

      array[i] = { x: innerX, y: innerY }

      this.data.pointArr[i].push(array[i])

    }

    for (var i = 0; i < array.length; i++) {

      var obj = array[i]

      if (i == 0) {

        ctx.moveTo(obj.x, obj.y);

      } else {

        ctx.lineTo(obj.x, obj.y);

      }

    }

    ctx.closePath()

    ctx.stroke()

  },

  /**

  * ctx 画布

  * x  中心点x坐标

  * y  中心点y坐标

  * lines 多边形边的数量

  * innerPadding 每层半径距离

  */

  drawInnerShape: function (ctx, radius, x, y, lines, innerPadding) {

    for(var i=0;i

      this.data.pointArr.push(new Array())

    }

    var num = radius / innerPadding;

    ctx.setStrokeStyle('red')

    ctx.setLineWidth(1)

    for (var i = 0; i < num; i++) {

      this.drawShape(ctx, radius - i * innerPadding, x, y, lines)

    }

    var outArr = this.data.pointArr

    //绘制中心线

    for (var i = 0; i < outArr.length; i++) {

      var obj = outArr[i][0]

      ctx.beginPath()

      ctx.moveTo(x, y)

      ctx.lineTo(obj.x, obj.y)

      ctx.stroke()

    }

  },

  /**

  * 绘制覆盖区域

  */

  drawCentRect:function(ctx,levelArr){

    ctx.beginPath()

    ctx.setFillStyle('blue')

    ctx.setGlobalAlpha(0.5)

    var arr=this.data.pointArr

    for(var i=0;i

      var level=levelArr[i]

      var x = arr[i][level].x

      var y = arr[i][level].y

      if(i==0){

      ctx.moveTo(x, y)

      }else{

      ctx.lineTo(x, y)

      }

    }

    ctx.closePath()

    ctx.fill()

  }

还有文字没有放上去,先这样啦......

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,271评论 0赞 2
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,703评论 0赞 13
  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,925评论 2赞 32
  • 1,很多事情你无法想象,但它发生了。 2,为生活涂上颜色。 3,有时候有是一种负担也是一种炫耀。 4,芸芸众生都在...
    峰鸟阅读 284评论 0赞 0
  • 2018年1月12日 雪 星期五 记得自己小时候,经常在这个季节跟一群与自己差不多的野孩子一起到水库、池塘等的水面...
    泥鳅的恋爱阅读 415评论 2赞 8

友情链接更多精彩内容