微信小程序实现签字功能


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 相关文章推荐
让iframe自适应高度(支持XHTML,支持FF)
Jul 24 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
js预加载图片方法汇总
Jun 15 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
微信开发 微信授权详解
Oct 21 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
Sep 03 Javascript
Three.js中矩阵和向量的使用教程
Mar 19 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
vue 单页应用和多页应用的优劣
Oct 22 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
js实现类选择器和name属性选择器的示例步骤
Feb 07 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/07/23 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
用python实现一个简单的验证码
2020/12/09 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
中学生差生评语
2014/01/30 职场文书
高三自我评价
2014/02/01 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
抽样调查项目计划书
2014/04/24 职场文书
教育实习指导教师评语
2014/12/31 职场文书
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL