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


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正确获取元素样式详解
Aug 07 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
js导航菜单(自写)简单大方
Mar 28 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
Sep 01 Javascript
使用AngularJS实现可伸缩的页面切换的方法
Jun 19 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
node.js自动上传ftp的脚本分享
Jun 16 Javascript
vue改变循环遍历后的数据实例
Nov 07 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 Javascript
Node.js API详解之 zlib模块用法分析
May 19 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中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
python通过加号运算符操作列表的方法
2015/07/28 Python
Python中动态创建类实例的方法
2017/03/24 Python
python 输出上个月的月末日期实例
2018/04/11 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
华为C++笔试题
2014/08/05 面试题
论文诚信承诺书
2014/05/23 职场文书
教师个人学习总结
2015/02/11 职场文书
死者家属慰问信
2015/03/24 职场文书
秋收起义观后感
2015/06/11 职场文书
追悼词范文大全
2015/06/23 职场文书