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


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 相关文章推荐
监控 url fragment变化的js代码
Apr 19 Javascript
Prototype源码浅析 String部分(二)
Jan 16 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
Oct 12 Javascript
Javascript中For In语句用法实例
May 14 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
Nov 15 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
Node.js连接Sql Server 2008及数据层封装详解
Aug 27 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 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中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python取代netcat过程分析
2018/02/10 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python中plot实现即时数据动态显示方法
2018/06/22 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
测控技术自荐信
2014/06/05 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
少年犯观后感
2015/06/11 职场文书
三八节活动简报
2015/07/20 职场文书
旅游安全责任协议书
2016/03/22 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL