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


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 相关文章推荐
jQuery+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
javascript中的undefined 与 null 的区别  补充篇
Mar 17 Javascript
js给onclick事件赋值,动态传参数实例解说
Mar 28 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
从数据库读取数据后将其输出成html标签的三种方法
Oct 13 Javascript
javascript 使用for循环时该注意的问题-附问题总结
Aug 19 Javascript
js动态获取子复选项并设计全选及提交的实现方法
Jun 24 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
Oct 17 Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
Jul 13 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
Jun 25 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
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
详解Bootstrap按钮
2016/01/04 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
初学python数组的处理代码
2011/01/04 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
python实现八大排序算法(1)
2017/09/14 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
python基于socket函数实现端口扫描
2020/05/28 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
Python如何输出警告信息
2020/07/30 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
Python对excel的基本操作方法
2021/02/18 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
团干部培训方案
2014/06/03 职场文书
质量负责人任命书
2014/06/06 职场文书
学校花圃的标语
2014/06/18 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android
Win11 BitLocker 驱动器加密
2022/04/19 数码科技