微信小程序实现签字功能


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 相关文章推荐
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
onbeforeunload与onunload事件异同点总结
Jun 24 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
jQuery中html()方法用法实例
Dec 25 Javascript
详解JavaScript函数对象
Nov 15 Javascript
javascript瀑布流式图片懒加载实例
Jun 28 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
JS判断是否手机或pad访问实现方法
Dec 09 Javascript
Vue2.x中的父组件传递数据至子组件的方法
May 01 Javascript
JS检测window.open打开的窗口是否关闭
Jun 25 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
JavaScript工具库MyTools详解
Jan 01 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
Python通过select实现异步IO的方法
2015/06/04 Python
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python 修改列表中的元素方法
2018/06/26 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
大四本科生的自我评价
2013/12/30 职场文书
2014组织生活会方案
2014/05/19 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
高中英语教学反思范文
2016/03/02 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis