小程序canvas电子签名

签名此处利用的是横屏需要在json文件中添加
"pageOrientation": "landscape"
 
<view class='container'>
  <!-- 签名画布 -->
  <view style="width:{{width}}px;height:{{height}}px;border: 3rpx solid #000000;">
    <canvas class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback" style="width:{{width}}px;height:{{height}}px">
    </canvas>
  </view>
  <view class='buttonBox'>
    <button bindtap='save' class='surebutton' open-type="getuserinfo">确定</button>
    <button type="default" class='emptybutton' bindtap="emptydraw">清除</button>
  </view>
</view>

  

//全局配置
const app = getApp()
var context = null;
var isButtonDown = false;
var arrx = [];
var arry = [];
var arrz = [];
var canvasw = 0;
var canvash = 0;
//注册页面
Page({
  data: {
    'width':'',
    'height':''
  },
  canvasIdErrorCallback: function (e) {
    console.error(e.detail.errMsg)
  },
  //开始
  canvasStart: function (event) {
    isButtonDown = true;
    arrz.push(0);
    arrx.push(event.changedTouches[0].x);
    arry.push(event.changedTouches[0].y);
 
  },
  
 
  onLoad: function (options) {
    canvasw = wx.getSystemInfoSync().windowWidth;
    canvash = wx.getSystemInfoSync().windowHeight*0.8;
    this.setData({
      'height':wx.getSystemInfoSync().windowHeight*0.8,
      'width':wx.getSystemInfoSync().windowWidth
    })
    context = wx.createCanvasContext('canvas');
    context.beginPath()
    context.draw();
  },
 
  //绘画过程过程
  canvasMove: function (event) {
    if (isButtonDown) {
      arrz.push(1);
      arrx.push(event.changedTouches[0].x);
      arry.push(event.changedTouches[0].y);
    };
 
    for (var i = 0; i < arrx.length; i++) {
      if (arrz[i] == 0) {
        context.moveTo(arrx[i], arry[i])
      } else {
        context.lineTo(arrx[i], arry[i])
      };
 
    };
    context.clearRect(0, 0, canvasw, canvash);//设置坐标和宽高
    context.setStrokeStyle('black');//设置或返回用于笔触的颜色、渐变或模式。
    context.setFillStyle('#fff')
    context.fillRect(0, 0, this.data.width, this.data.width)
    context.setLineWidth(4);//设置或返回当前的线条宽度
    context.setLineCap('round');//设置或返回线条的结束端点样式。
    context.setLineJoin('round');//设置或返回两条线相交时,所创建的拐角类型。
    context.stroke();//绘制已定义的路径。
    context.draw(true);
  
  },
  
  canvasEnd: function (event) {
    isButtonDown = false;
  },
  //清除画布
  emptydraw: function () {
    arrx = [];
    arry = [];
    arrz = [];
    context.clearRect(0, 0, canvasw, canvash);
    context.draw(true);
  },
  // 点击保存签名图片
  save: function () {
    var that = this;
    if (arrx.length == 0) {
      wx.showModal({
        content: '签名内容不能为空!',
        showCancel: false
      });
      return false;
    };
      wx.canvasToTempFilePath({
        canvasId: 'canvas',
        fileType: 'jpg',
        success: function (res) {
          wx.uploadFile({
            url: url, //接口地址
            header: {
              "Content-Type": "multipart/form-data",
              'Accept': 'application/json' 
            },
            filePath: res.tempFilePath,
            name: 'file',
            formData: {
            },
            success: function (res) {
              
                  
                }, (error) => {
                  console.log(error)
                })
              }
            }
           });
        }
      })
    
  },

    /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  
  },
 
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  
  },
 
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  
  },
 
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  
  },
 
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  
  },
 
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
  
  },
 
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  
  }
 
})
/* pages/signature/signature.wxss */
.container{
    padding: 2.5% 0;
  }
  .canvas {
    position: fixed;
    box-sizing: border-box;
  } 
  
  .imageCanvas{
    width: 100%;
    height: 300rpx;
  }
  .buttonBox{
    width: 100%;
    justify-content: center;
    display: flex;
    position: fixed;
    bottom: 0;
    left: 0;
  }
  .surebutton{
    color: black;
    background-color: aquamarine;
  }
  .emptybutton{
    color: aqua !important;
    background-color: rgb(32, 85, 121) !important;
  }
 

 

 

posted @ 2021-05-28 11:22  陳丶  阅读(463)  评论(0编辑  收藏  举报