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


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 相关文章推荐
jQuery UI 应用不同Theme的办法
Sep 12 Javascript
jQuery bind事件使用详解
May 05 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
Feb 13 Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
Node.js使用Angular简单示例
May 11 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
自定义Vue组件打包、发布到npm及使用教程
May 22 Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 Javascript
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
Jul 27 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 4.2书写安全的脚本
2006/10/09 PHP
php中{}大括号是什么意思
2013/12/01 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP 错误处理机制
2015/07/06 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
javascript的BOM
2016/05/03 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
python基础教程之序列详解
2014/08/29 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
高中生活自我鉴定
2014/01/18 职场文书
个人委托函范文
2015/01/29 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
初中化学教学反思
2016/02/22 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技