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


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 相关文章推荐
JS实现self的resend
Jul 22 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
Mar 28 Javascript
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
正负小数点后两位浮点数实现原理及代码
Sep 06 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
JavaScript中使用指数方法Math.exp()的简介
Jun 15 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
Bootstrap CSS组件之导航条(navbar)
Dec 17 Javascript
js实现文字跑马灯效果
Feb 23 Javascript
React中如何引入Angular组件详解
Aug 09 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
Dec 26 Javascript
js canvas实现5张图片合成一张图片
Jul 15 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 方便水印和缩略图的图形类
2009/05/21 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
php对微信支付回调处理的方法
2018/08/23 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
Python 列表反转显示的四种方法
2020/11/16 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
HTML5样式控制示例代码
2013/11/27 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
会计岗位职责
2015/02/03 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
Pygame Rect区域位置的使用(图文)
2021/11/17 Python