微信小程序实现电子签名功能


Posted in Javascript onJuly 29, 2020

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

// XXXX.wxml
<view class="signName">
 <canvas class="canvas" id="canvas" canvas-id="canvas" disable-scroll="true" bindtouchstart="canvasStart"
  bindtouchmove="canvasMove" bindtouchend="canvasEnd" touchcancel="canvasEnd"
  binderror="canvasIdErrorCallback"></canvas>
 </view>
 <view class="CList flex">
 <view class="flex_item marginR20" >
  <view class="saveBtn" bindtap="uploadImg">上传签名</view>
 </view>
 <view class="flex_item">
  <view class="clearBtn" bindtap="cleardraw">清除签名</view>
</view>

js:

var context = null;// 使用 wx.createContext 获取绘图上下文 context
var isButtonDown = false;//是否在绘制中
var arrx = [];//动作横坐标
var arry = [];//动作纵坐标
var arrz = [];//总做状态,标识按下到抬起的一个组合
var canvasw = 0;//画布宽度
var canvash = 0;//画布高度
Page({

 data: {
 },
 
 onLoad: function () {
  this.startCanvas();
 },
 /**
 * 以下 - 手写签名 / 上传签名
 */
 startCanvas: function () {//画布初始化执行
 var that = this;
 //获取系统信息
 wx.getSystemInfo({
  success: function (res) {
  canvasw = res.windowWidth;
  canvash = res.windowHeight;
  that.setData({ canvasw: canvasw });
  that.setData({ canvash: canvash });
  }
 }); 
 this.initCanvas();
 this.cleardraw(); 
 },
 //初始化函数
 initCanvas: function () {
 context = wx.createCanvasContext('canvas');
 context.beginPath()
 context.fillStyle = 'rgba(255, 255, 255, 0)';
 context.setStrokeStyle('#000000');
 context.setLineWidth(4);
 context.setLineCap('round');
 context.setLineJoin('round');
 },
 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);
 },
 uploadImg(){
 var that = this
 //生成图片
 wx.canvasToTempFilePath({
  canvasId: 'canvas',
  //设置输出图片的宽高
  // destWidth:150, 
  // destHeight:150,
  // fileType:'jpg',
  quality:1.0,
  success: function (res) {
  console.log(res)
  // canvas图片地址 res.tempFilePath
  },
  fail: function () {
  wx.showModal({
   title: '提示',
   content: 'canvas生成图片失败。微信当前版本不支持,请更新到最新版本!',
   showCancel: false
  });
  },
  complete: function () {}
 })
 },
})

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

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

Javascript 相关文章推荐
js解析与序列化json数据(一)json.stringify()的基本用法
Feb 01 Javascript
JavaScript将XML转成JSON的方法
Mar 12 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
Angular项目中$scope.$apply()方法的使用详解
Jul 26 Javascript
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
浅谈vue后台管理系统权限控制思考与实践
Dec 19 Javascript
jQuery zTree插件使用简单教程
Aug 16 jQuery
详解为什么Vue中不要用index作为key(diff算法)
Apr 04 Javascript
node.js文件的复制、创建文件夹等相关操作
Feb 05 Javascript
Vue的自定义组件不能使用click方法的解决
Jul 28 #Javascript
浅谈JavaScript中this的指向问题
Jul 28 #Javascript
浅谈JavaScript中this的指向更改
Jul 28 #Javascript
Postman内建变量常用方法实例解析
Jul 28 #Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 #Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 #Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 #Javascript
You might like
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
PHP下几种删除目录的方法总结
2007/08/19 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php eval函数用法总结
2012/10/31 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
javascript数据类型详解
2017/02/07 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
[02:21]2018完美盛典章节片——初心
2018/12/17 DOTA
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
python操作redis的方法
2015/07/07 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
2014年中班元旦活动方案
2014/02/14 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
毕业赠语大全
2015/06/23 职场文书
岗位聘任协议书
2015/09/21 职场文书