小程序画布canvas

实现在小程序画布上自由移动画线了解小程序canvas。


在小程序开发工具新建一个paint页面。

小程序画布组件canvas
打开paint.wxml

<canvas  canvas-id="canvasline" class="canvasboard"></canvas>


添加画布,设定组件标识canvasline,这样保存还是看不出有什么改变,

到paint.wxss设定样式

.canvasboard{
  background-color: #e2ebf3;
  width: 400px;
  height: 400px;
}


保存这样就看到一个方形的背景就是画布。如图,

小程序画布API。
moveTo(),把路径移动到画布中的指定点,不创建线条。
lineTo(),增加一个新点,然后创建一条从上次指定点到目标点的线。用 stroke 方法来画线条
主要是通过上面两个方法在canvas上画线的。
先要在画布创建绘图上下文
打开paint.js,在最上面
var ctx=wx.createCanvasContext('canvasline')
先尝试代码在上面画一条线。
在onLoad里面,保存。
ctx.moveTo(50, 50)
ctx.lineTo(200, 50)
ctx.stroke()
ctx.draw()
如图,

要自由移动画线,就要加上触摸开始,移动事件
paint.wxml

<canvas canvas-id="canvasline" class="canvasboard" bindtouchstart='handtouchstart' bindtouchmove="handtouchmove"></canvas>


写触摸开始和移动事件取到开始和移动触摸的坐标

// 触屏开始
  handtouchstart: function (e) {
    let startx = e.changedTouches[0].x
    let starty = e.changedTouches[0].y
  },
  // 触屏移动
  handtouchmove: function (e) {
    let movex = e.changedTouches[0].x
    let movey = e.changedTouches[0].y
  },


这样取到了触摸移动的位置。

新加x,y,newx,newy变量分别取起始位置和移动位置

data: {
    x:0,
    y:0,
    newx: 0,
    newy: 0,
  },



开始触摸取位置

handtouchstart: function (e) {
    let startx = e.changedTouches[0].x
    let starty = e.changedTouches[0].y
    this.setData({
      x: startx,
      y: starty,
    })
  },


 
移动取位置

 handtouchmove: function (e) {
    let movex = e.changedTouches[0].x
    let movey = e.changedTouches[0].y
    this.setData({
      newx: movex,
      newy: movey,
    })
},


 
取到位置那就好办了,把刚刚写在onLoad画线的代码移过来,

// 触屏移动
  handtouchmove: function (e) {
    let movex = e.changedTouches[0].x
    let movey = e.changedTouches[0].y
    this.setData({
      newx: movex,
      newy: movey,
    })
    ctx.moveTo(this.data.x, this.data.y)
    ctx.lineTo(this.data.newx, this.data.newy)
    ctx.stroke()
    ctx.draw()
  },


保存,去试试。如图,

这只是画直线,不是我想要和自由移动画线。
看上面代码,要自由移动画线,ctx.moveTo(this.data.x, this.data.y)这里的起始移动的位置也要跟着触摸移动变的才对。这样就知道怎么处理了,随着移动更新起始位置x,y的值。

// 触屏移动
  handtouchmove: function (e) {
    let movex = e.changedTouches[0].x
    let movey = e.changedTouches[0].y
    this.setData({
      newx: movex,
      newy: movey,
    })
    ctx.moveTo(this.data.x, this.data.y)
    ctx.lineTo(this.data.newx, this.data.newy)
    ctx.stroke()
    ctx.draw()
    this.setData({
      x: movex,
      y: movey,
    })
  },



保存,去试试。如图,

有一个点在移动,却没有成线。刚才画直线也是画一条画下一条上一条就不见了。
那么要看小程序画布draw方法,发现只需要加个true参数就可以了。
若参数为 true,则保留当前画布上的内容,本次调用 drawCanvas 绘制的内容覆盖在上面,默认 false。

 handtouchmove: function (e) {
    let movex = e.changedTouches[0].x
    let movey = e.changedTouches[0].y
    this.setData({
      newx: movex,
      newy: movey,
    })
    ctx.moveTo(this.data.x, this.data.y)
    ctx.lineTo(this.data.newx, this.data.newy)
    ctx.stroke()
    ctx.draw(true)
    this.setData({
      x: movex,
      y: movey,
    })
  },


 
保存,去试试,如图,

 

 

转载于:https://my.oschina.net/oisanblog/blog/3072574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值