当前位置:首页 > 小程序教程 > 小程序基础

微信小程序画布

canvas 画布

所有在 canvas 中的画图必须用 javascript 完成:

wxml:(我们在接下来的例子中如无特殊声明都会用这个 wxml 为模板,不再重复)

<canvas canvas-id="mycanvas" style="border: 1px solid;"/>

js:(我们在接下来的例子中会将 js 放在 onready 中)

const ctx = wx.createcanvascontext('mycanvas')
ctx.setfillstyle('red')
ctx.fillrect(10, 10, 150, 75)
ctx.draw()

第一步:创建一个 canvas 绘图上下文

首先,我们需要创建一个 canvas 绘图上下文 canvascontext。

canvascontext 是小程序内建的一个对象,有一些绘图的方法:

const ctx = wx.createcanvascontext('mycanvas')

第二步:使用 canvas 绘图上下文进行绘图描述

接着,我们来描述要在 canvas 中绘制什么内容。

设置绘图上下文的填充色为红色:

ctx.setfillstyle('red')

用 fillrect(x, y, width, height) 方法画一个矩形,填充为刚刚设置的红色:

ctx.fillrect(10, 10, 150, 75)

第三步:画图

告诉 canvas 组件你要将刚刚的描述绘制上去:

ctx.draw()

结果:

坐标系

canvas 是在一个二维的网格当中。左上角的坐标为(0, 0)。

在上一节,我们用了这个方法 fillrect(0, 0, 150, 75)。

它的含义为:从左上角(0, 0)开始,画一个150 x 75px 的矩形。

代码示例

我们可以在 canvas 中加上一些事件,来观测它的坐标系

<canvas canvas-id="mycanvas"
  style="margin: 5px; border:1px solid #d3d3d3;"
  bindtouchstart="start"
  bindtouchmove="move"
  bindtouchend="end"/>

<view hidden="{{hidden}}">
  coordinates: ({{x}}, {{y}})
</view>
page({
  data: {
    x: 0,
    y: 0,
    hidden: true
  },
  start (e) {
    this.setdata({
      hidden: false,
      x: e.touches[0].x,
      y: e.touches[0].y
    })
  },
  move (e) {
    this.setdata({
      x: e.touches[0].x,
      y: e.touches[0].y
    })
  },
  end (e) {
    this.setdata({
      hidden: true
    })
  }
})

当你把手指放到 canvas 中,就会在下边显示出触碰点的坐标:

渐变

渐变能用于填充一个矩形,圆,线,文字等。填充色可以不固定为固定的一种颜色。

我们提供了两种颜色渐变的方式:

  • createlineargradient(x, y, x1, y1) 创建一个线性的渐变
  • createcirculargradient(x, y, r) 创建一个从圆心开始的渐变

一旦我们创建了一个渐变对象,我们必须添加两个颜色渐变点。

addcolorstop(position, color) 方法用于指定颜色渐变点的位置和颜色,位置必须位于0到1之间。

可以用setfillstyle 和 setstrokestyle 方法设置渐变,然后进行画图描述。

使用 createlineargradient()

const ctx = wx.createcanvascontext('mycanvas')

// create linear gradient
const grd = ctx.createlineargradient(0, 0, 200, 0)
grd.addcolorstop(0, 'red')
grd.addcolorstop(1, 'white')

// fill with gradient
ctx.setfillstyle(grd)
ctx.fillrect(10, 10, 150, 80)
ctx.draw()

使用 createcirculargradient()

const ctx = wx.createcanvascontext('mycanvas')

// create circular gradient
const grd = ctx.createcirculargradient(75, 50, 50)
grd.addcolorstop(0, 'red')
grd.addcolorstop(1, 'white')

// fill with gradient
ctx.setfillstyle(grd)
ctx.fillrect(10, 10, 150, 80)
ctx.draw()

 


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!