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


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中void(0)的具体含义解释
Aug 02 Javascript
jQuery最佳实践完整篇
Aug 20 Javascript
网页整体变灰白色(兼容各浏览器)实例
Apr 21 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
Feb 26 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
使用jquery实现以post打开新窗口
Mar 19 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
vue组件详解之使用slot分发内容
Apr 09 Javascript
深入了解javascript 数组的sort方法
Jun 01 Javascript
node.js express框架实现文件上传与下载功能实例详解
Oct 15 Javascript
javascript全局自定义鼠标右键菜单
Dec 08 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
详解使用webpack构建多页面应用
2017/12/21 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python类装饰器用法实例
2015/06/04 Python
django中的setting最佳配置小结
2017/11/21 Python
python找出完数的方法
2018/11/12 Python
Python面向对象实现方法总结
2020/08/12 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
大学生军训自我评价分享
2013/11/09 职场文书
风险评估实施方案
2014/03/09 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android