微信小程序实现签字功能


Posted in Javascript onDecember 23, 2019

效果展示

微信小程序实现签字功能 

准备工作

1.canvas的使用

主要用到了 bindtouchstart , bindtouchmove 两个属性,捕捉手指移动的同时,将移动前的坐标和移动后的坐标用canvas的画图api绘制出来

2.wx.createCanvasContext

这个api用于创建并获取指定canvas对象

代码说明

在wxml中声明一个canvas

指定canvas-id和触摸开始和移动函数

<canvas canvas-id="firstCanvas" id='firstCanvas' bindtouchstart="bindtouchstart" bindtouchmove="bindtouchmove"></canvas>

初始化canvas

onShow: function() {
 const context = wx.createCanvasContext('firstCanvas')
 this.setData({
  context: context
 })
 context.draw()
 },

给手指触摸绑定函数

// 开始触摸
bindtouchstart: function(e) {
 console.log("bindtouchstart", e);
 this.data.context.moveTo(e.changedTouches[0].x, e.changedTouches[0].y)
 },
 
// 触摸移动
bindtouchmove: function(e) {
 console.log("bindtouchstart", e);
 this.data.context.lineTo(e.changedTouches[0].x, e.changedTouches[0].y);
 this.data.context.stroke();
 this.data.context.draw(true);
 this.data.context.moveTo(e.changedTouches[0].x, e.changedTouches[0].y);
 },

具体代码

index.wxml

<view class="container">
 <canvas style="margin: 0 15rpx;width: 720rpx;height: 720rpx;border: 1px #333 solid;background-color: #fff;" canvas-id="firstCanvas" id='firstCanvas' bindtouchstart="bindtouchstart" bindtouchmove="bindtouchmove"></canvas>
 <view class="btn">
 <view bindtap='clear' class="clear">
  清除
 </view>
 <view bindtap='export' class="submit">
  提交
 </view>
 </view>
 <image style="width:360rpx;height:360rpx;margin: 10rpx 0;" mode="aspectFill" src="{{imgUrl}}"></image>
</view>

index.js

Page({
 data: {
 context: null,
 imgUrl: ""
 },
 /**记录开始点 */
 bindtouchstart: function(e) {
 this.data.context.moveTo(e.changedTouches[0].x, e.changedTouches[0].y)
 },
 /**记录移动点,刷新绘制 */
 bindtouchmove: function(e) {
 this.data.context.lineTo(e.changedTouches[0].x, e.changedTouches[0].y);
 this.data.context.stroke();
 this.data.context.draw(true);
 this.data.context.moveTo(e.changedTouches[0].x, e.changedTouches[0].y);
 },
 /**清空画布 */
 clear: function() {
 this.data.context.draw();
 },
 /**导出图片 */
 export: function() {
 const that = this;
 this.data.context.draw(false, wx.canvasToTempFilePath({
  x: 0,
  y: 0,
  fileType: 'jpg',
  canvasId: 'firstCanvas',
  success(res) {
  const {
   tempFilePath
  } = res;
  that.setData({
   imgUrl: tempFilePath,
  })
  },
  fail() {
  wx.showToast({
   title: '导出失败',
   icon: 'none',
   duration: 2000
  })
  }
 }))
 },
 onShow: function() {
 const context = wx.createCanvasContext('firstCanvas')
 this.setData({
  context: context
 })
 context.draw()
 },
})

总结

以上所述是小编给大家介绍的微信小程序实现签字功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
Nov 26 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
May 10 Javascript
不同浏览器的怪癖小结
Jul 11 Javascript
JS实现程序暂停与继续功能代码解读
Oct 10 Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
bootstrap table分页模板和获取表中的ID方法
Jan 10 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
Apr 13 Javascript
使用JS location实现搜索框历史记录功能
Dec 23 #Javascript
vue实现移动端图片上传功能
Dec 23 #Javascript
vue实现拖拽效果
Dec 23 #Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 #jQuery
Jquery属性的获取/设置及样式添加/删除操作技巧分析
Dec 23 #jQuery
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 #jQuery
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 #jQuery
You might like
PHP学习之数组值的操作
2011/04/17 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
浅谈Vue2.0中v-for迭代语法的变化(key、index)
2018/03/06 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Python用SSH连接到网络设备
2021/02/18 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
C语言中break与continue的区别
2012/07/12 面试题
新员工入职感言
2014/02/01 职场文书
解除劳动合同协议书
2014/04/14 职场文书
自我推荐信格式模板
2015/03/24 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
Python字符串常规操作小结
2022/04/03 Python
Redis主从复制操作和配置详情
2022/09/23 Redis