使用Canvas动态画圆
静态画圆
canvas 唯一标识canvas-id
1 | <canvas canvas-id="clock_bg" class="clock_bg"></canvas> |
1 | let lineWidth = 10 / this.data.rate//需要转换为像素单位,但不能直接使用像素单位 |
解释一下
this.data.rate
是rpx/px的一种比例,如果使用rpx就可以不用去转换比例,可以根据不同的手机来改变相应的宽度。但是这里需要px像素单位,不能自适应,因此需要通过这种this.data.rate
来改变,且像素单位
createCanvasContext
canvas 组件的绘图上下文。CanvasContext 是旧版的接口, 新版 Canvas 2D 接口与 Web 一致。setLineWidth
线条的宽度,单位pxsetStrokeStyle
描边的颜色,默认颜色为 black。setLineCap0
设置线条的端点样式值 说明 butt 向线条的每一个末端添加平直的边缘 round 添加圆形线帽 square 正方形线帽 beginPath
开始创建一个路径。需要调用fill
或者stroke
才会使用路径进行填充或描边arc 创建一条弧线。
创建一个圆可以指定起始弧度为 0,终止弧度为 2 * Math.PI。
用
stroke
或者fill
方法来在canvas
中画弧线。
draw 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。
动态画圆
其实原理和静态圆一样,只是动态圆需要设置一个延时器,一小段一小段的画。根据当前的时间,进行绘制
1 | // 设置延时器,100毫秒绘制一次,时间越短,绘制越精细 |
1 | let _this = this |
1 | // 一部分数据 |
1 | setInterval(() => { |
1 | // if(angle < 3.5) 内,绘制一个圆内 |
1 | ……400 / this.data.rate / 2 - 2 * lineWidth, 1.5 * Math.PI, angle * Math.PI, false) |
画圆方法封装
1 | drawYuan(lineWidth,canvas_id,canvas_color,width,start,end){ |
lineWidth
存放在data里面的数据,方法里面会自动转换比例canvas_id
canvas的唯一标识canvas-id,而不是idcanvas_color
路径填充颜色width
圆形的宽度,和长度start
花园的起始点,1.5 * Math.PIend
结束点
动态画圆其实一直是从起始点开始画,而不是接上之前的。
像素单位自适应
lineWidth
是像素px单位,因此微信小程序中无法使用px,但是使用rpx这种画圆方法不支持。
1 | const res = wx.getSystemInfoSync(); |
根据不同的手机信息,来获取不同的宽度比例,将
lineWidth
转换为像素单位,且达到自适应效果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SimpleLife!