微信小程序实现电子签名并导出图片


Posted in Javascript onMay 27, 2020

本文实例为大家分享了微信小程序做电子签名,并导出图片的具体代码,供大家参考,具体内容如下

wxml:

<canvas class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart" bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd" binderror="canvasIdErrorCallback"></canvas>

<button type="default" bindtap="cleardraw">清除画布</button>
<button type="default" bindtap="getimg">导出图片</button>

wxss:

.canvas {
 width: 100%;
 min-height: 400rpx;
 border: 1rpx solid #000;  /*//突出canvas画布范围 */
 box-sizing: border-box;
}

js:

var context = null;// 使用 wx.createContext 获取绘图上下文
var isButtonDown = false;
var arrx = [];
var arry = [];
var arrz = [];
var canvasw = 0;
var canvash = 0;
//获取系统信息
wx.getSystemInfo({
 success: function (res) {
  canvasw = res.windowWidth;//设备宽度
  canvash = res.windowHeight; //设备高度
 }
});

Page({
 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);
 },
 //绘制过程
 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('#000000');
  context.setLineWidth(4);
  context.setLineCap('round');
  context.setLineJoin('round');
  context.stroke();

  context.draw(false);
 },
 canvasEnd: function (event) {
  isButtonDown = false;
 },
 cleardraw: function () {
  //清除画布
  arrx = [];
  arry = [];
  arrz = [];
  context.clearRect(0, 0, canvasw, canvash);
  context.draw(true);
 },
 //导出图片
 getimg: function () {
  if (arrx.length == 0) {
   wx.showModal({
    title: '提示',
    content: '签名内容不能为空!',
    showCancel: false
   });
   return false;
  };
  //生成图片
  wx.canvasToTempFilePath({
   canvasId: 'canvas',
   success: function (res) {
    wx.saveImageToPhotosAlbum({
     filePath: res.tempFilePath,
     success(res) {
      // console.log(res)
      wx.showToast({
       title: '保存成功',
      });
     },
     fail(err) {
      console.log(err)
     }
    })
    //将照片存入服务器
    // wx.uploadFile({
    //  url: '', //接口地址
    //  filePath: res.tempFilePath,
    //  name: 'file',
    //  formData: {               
    //   'user': 'test'
    //  },
    //  success function (res) {
    //   console.log(res);
    //  },
    //  fail: function (res) {
    //   console.log(res);
    //  },
    //  complete: function (res) {
    //  }
    // });
   }
  })

 },
 /**
  * 页面的初始数据
  */
 data: {
  
 },
 /**
  * 生命周期函数--监听页面加载
  */
 onLoad: function (options) {
  // 使用 wx.createContext 获取绘图上下文 context
  context = wx.createCanvasContext('canvas');
  context.beginPath()
  context.setStrokeStyle('#000000');
  context.setLineWidth(4);
  context.setLineCap('round');
  context.setLineJoin('round');
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScrip实现PHP print_r的数功能(三种方法)
Nov 12 Javascript
js计算两个时间之间天数差的实例代码
Nov 19 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
json的使用小结
Jun 08 Javascript
利用JavaScript判断浏览器类型及版本
Aug 23 Javascript
Vue自定义指令介绍(2)
Dec 08 Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 jQuery
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
Dec 09 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
如何让node运行es6模块文件及其原理详解
Dec 11 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 11 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 #Javascript
微信公众号网页分享功能开发的示例代码
May 27 #Javascript
JS字符串补全方法padStart()和padEnd()
May 27 #Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 #Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
May 27 #Javascript
使用JavaScript获取Django模板指定键值数据
May 27 #Javascript
基于Vue CSR的微前端实现方案实践
May 27 #Javascript
You might like
PHP加密解密实例分析
2015/12/25 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
vue实现文件上传功能
2018/08/13 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
tornado框架blog模块分析与使用
2013/11/21 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
python获取栅格点和面值的实现
2020/03/10 Python
python如何保存文本文件
2020/06/07 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
国际政治个人自荐信范文
2013/11/26 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
个人租房协议书样本
2014/10/01 职场文书
科技活动总结范文
2015/05/11 职场文书
《假如》教学反思
2016/02/17 职场文书
Python 中的 copy()和deepcopy()
2021/11/07 Python