微信小程序实现签字功能


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 相关文章推荐
javascript对象的property和prototype是这样一种关系
Mar 24 Javascript
javascript 常用关键字列表集合
Dec 04 Javascript
Extjs ajax同步请求时post方式参数发送方式
Aug 05 Javascript
js判断元素是否隐藏的方法
Jun 09 Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 Javascript
Node.js的文件权限及读写flag详解
Oct 11 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
Node 升级到最新稳定版的方法分享
May 17 Javascript
微信小程序性能优化之checkSession的使用
Mar 06 Javascript
vue cli安装使用less的教程详解
Jul 12 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 Javascript
vue-cli4.x创建企业级项目的方法步骤
Jun 18 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网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
js实现星星海特效的示例
2020/09/28 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
python 字符串只保留汉字的方法
2018/11/16 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
python树的同构学习笔记
2019/09/14 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
网络编辑岗位职责范本
2014/02/10 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书