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


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 相关文章推荐
JavaScript生成随机数的4种自定义函数分享
Feb 28 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
AngularJS实现Model缓存的方式
Feb 03 Javascript
js获取隐藏元素宽高的实现方法
May 19 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(一)
May 11 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 Javascript
彻底揭秘keep-alive原理(小结)
May 05 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 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 截取字符串专题集合
2010/08/19 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
详解使用Python处理文件目录的相关方法
2015/10/16 Python
django之常用命令详解
2016/06/30 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python调用java的jar包方法
2018/12/15 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
C++是不是类型安全的
2014/02/18 面试题
介绍一下except的用法和作用
2015/01/22 面试题
公司新人试用期自我评价
2014/09/17 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python