微信小程序canvas小案例

效果如图,简单的画笔

 

 

index.wxml中的代码:

<view id="container">
  <view class="canvas_ht">
    <canvas canvas-id="myCanvas" class="myCanvas" disable-scroll="false" bindtouchstart="starChange" bindtouchmove="moveChange"></canvas>
  </view>
  <view class="canvasBtn">
    <button bindtap="clearChange">清除</button>
    

    <view class="section01">
      <text bindtap="cutWidth">-</text>
        <view class="body-view">
            <slider bindchange="slider3change" min="1" value="{{ pre.size }}" show-value/>
        </view>
      <text bindtap="addWidth">+</text>
    </view>


    <button bindtap="colorChange" data-cav="red">红色</button>
    <button bindtap="colorChange" data-cav="blue">蓝色</button>
    <button bindtap="colorChange" data-cav="yellow">黄色</button>
    <button bindtap="colorChange" data-cav="green">绿色</button>
    <button bindtap="colorChange" data-cav="#e8e8e8">背景颜色</button>
  </view>
</view>

 

index.wxss中的代码:

.myCanvas{
  width: 100%;
  background: #e8e8e8;
  height: 80vh;
}

.canvasBtn{
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

.canvasBtn>button{
  width: 50%;
  height: 60rpx;
  line-height: 60rpx;
  font-size: 28rpx;
}

.canvasBtn .section01{
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0 20rpx;
  box-sizing: border-box;
}

.canvasBtn .section01 .body-view{
  flex: 1;
}

.canvasBtn .section01 text{
  display: block;
  height: 50rpx;
  width: 50rpx;
  border: 1px solid #e8e8e8;
  line-height: 50rpx;
  text-align: center;
  border-radius: 50%;

}

 

index.js中的代码:

//index.js
const app = getApp()
let ctx,canvasW,canvasH;
Page({
  data: {
    pre:{
      color:"skyblue",
      size:5
    }
  },
  onLoad() {

    ctx = wx.createCanvasContext('myCanvas')
    // 两头圆角
    ctx.setLineCap('round')
    ctx.setLineJoin('round')
    this.canvasChange()

    // 节点查询 微信小程序没有dom操作,无法直接获取元素宽高
    const query = wx.createSelectorQuery()
    query.select('.myCanvas').boundingClientRect()
    query.exec(function (res) {
      canvasW = res[0].width
      canvasH = res[0].height
    })

  },
  
  canvasChange(){
    // 线条颜色
    ctx.setStrokeStyle(this.data.pre.color)
    // 线条宽度
    ctx.setLineWidth(this.data.pre.size)
  },


  starChange(e){
    var x = e.changedTouches[0].x
    var y = e.changedTouches[0].y
    ctx.moveTo(x, y)
    
  },
  moveChange(e) {
    var x = e.changedTouches[0].x
    var y = e.changedTouches[0].y
    ctx.lineTo(x, y)
    ctx.stroke()
    ctx.draw(true)
    ctx.moveTo(x, y)
  },
  
clearChange(){
  ctx.clearRect(0, 0, canvasW, canvasH)
  ctx.draw(true)
},
addWidth(){
  var size = this.data.pre.size
  if (size>100) return
  size++
  this.setData({
    'pre.size': size
  })
  this.canvasChange()
},
cutWidth(){
  var size = this.data.pre.size
  if (size <= 1) return
  size--
  this.setData({
    'pre.size': size
  })
  this.canvasChange()
},
  colorChange(e) {
    this.setData({
      'pre.color':e.target.dataset.cav
    })

    this.canvasChange()
    },


  slider3change(e){
    this.setData({
      'pre.size': e.detail.value
    })
    this.canvasChange()
  }
})

 

posted @ 2020-04-14 16:35  我也不想那么菜  阅读(1344)  评论(0编辑  收藏  举报