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


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 相关文章推荐
Bootstrap3使用typeahead插件实现自动补全功能
Jul 07 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
js replace()去除代码中空格的实例
Feb 14 Javascript
react native带索引的城市列表组件的实例代码
Aug 08 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
Dec 25 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 Javascript
解决element ui select下拉框不回显数据问题的解决
Feb 20 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
通过JS深度判断两个对象字段相同
Jun 14 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
微信小程序实现星级评价
Nov 20 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
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
PHP获取网站域名和地址的代码
2008/08/17 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
JQuery包裹DOM节点的方法
2015/06/11 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Python面向对象之Web静态服务器
2019/09/03 Python
django中嵌套的try-except实例
2020/05/21 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
长青弘远的面试题
2012/06/09 面试题
项目专员岗位职责
2013/12/04 职场文书
活动志愿者自荐信
2014/01/27 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
党校学习个人总结
2015/02/15 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers