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


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 打印内容方法小结
Nov 04 Javascript
JQuery select控件的相关操作实现代码
Sep 14 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
JSON+HTML实现国家省市联动选择效果
May 18 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
Bootstrap安装环境配置教程分享
May 27 Javascript
AngularJS入门教程之链接与图片模板详解
Aug 19 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
Dec 23 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
详解express与koa中间件模式对比
Aug 07 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
Apr 11 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
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
PHP多文件上传实例
2015/07/09 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
利用Python学习RabbitMQ消息队列
2015/11/30 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Python sep参数使用方法详解
2020/02/12 Python
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
传播学毕业生求职信
2013/10/11 职场文书
机修工岗位职责
2013/11/24 职场文书
倡议书格式范文
2014/04/14 职场文书
会计学习心得体会
2014/09/09 职场文书
初一英语教学反思
2016/02/15 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
Win11软件图标固定到任务栏
2022/04/19 数码科技
i7 6700处理器相当于i5几代
2022/04/19 数码科技