项目中有遇到在小程序上实现手动签名功能,今天给大家分享下代码
wxml 文件代码如下,catchtouchmove属性一定要加上,否则移动起来连笔非常不流畅

<view class="content" catchtouchmove="true"><view class="canvasBox"><text class="title">请在下面的白框中签名</text><text class="tips">签名既承诺所填信息完全属实</text><view class="sign-canvas-view"><canvastype="2d"id="myCanvas"style="width:702rpx;height:200px;"disable-scrollcapture-bind:touchstart="touchStart"capture-bind:touchmove="touchMove"></canvas></view></view><view class="submitBtn"><van-button plain  block style="width: 30vw;" bindtap="reset">重置</van-button><van-button bindtap="sure" block style="width: 30vw;" type="primary">提交</van-button></view>
</view>

wxss代码

.content {width: 100vw;height: 100vh;
}.canvasBox {margin-top: 10px;background-color: #fff;width: 100%;border-radius: 10px;display: flex;flex-direction: column;justify-content: space-around;
}
.title {font-size: 32rpx;padding: 0 24rpx;
}
.title::before {content: '*';color: red;
}
.tips {width: 100%;color: red;padding: 20px;box-sizing: border-box;
}
.sign-canvas-view {box-sizing: border-box;border: 2rpx solid grey;margin: 0 24rpx;
}.submitBtn {width: 100%;display: flex;justify-content: space-around;align-items: center;margin-top: 30px;
}

js代码

import appConfig from "../../../utils/globalConfig.js";
const {payAfterTreatmentSignUp} = require("../../../utils/api.js")
const globalConfig = require('../../../utils/globalConfig.js');
Page({data:{signPath:[],cardNo:'',preX:'',preY:'',apiUrl:appConfig.getLocalConfig().apiUrl,},onLoad(options){this.setData({cardNo:options.cardNo})wx.createSelectorQuery().select('#myCanvas').fields({node: true,size: true}).exec(this.init.bind(this))},init(data){console.log(data);const width = data[0].width;const height=data[0].height;const canvas = data[0].node;const ctx = canvas.getContext('2d');const dpr = wx.getSystemInfoSync().pixelRatiocanvas.width = width * dprcanvas.height =  height * dprctx.scale(dpr,dpr)this._dpr = dprthis._ctx = ctxthis._canvas = canvas},touchStart(e){console.log(e)const { _ctx:ctx } = thisconst { clientX:x ,clientY:y } = e.touches[0]ctx.beginPath()// ctx.moveTo(x-e.target.offsetLeft, y-e.target.offsetTop)ctx.moveTo(x-e.target.offsetLeft, y-e.target.offsetTop)this.setData({preX:x-e.target.offsetLeft,preY:y-e.target.offsetTop,})},    touchMove(e){const { _ctx:ctx } = thisconst { clientX:x ,clientY:y } = e.touches[0]this.data.signPath.push([x,y])this.setData({signPath:this.data.signPath})let preX = this.data.preXlet preY = this.data.preYlet curX = x-e.target.offsetLeftlet curY = y-e.target.offsetToplet deltaX = Math.abs(preX - curX)let deltaY = Math.abs(preY - curY)if (deltaX >= 3 || deltaY >= 3) {// 前后两点中心点let centerX = (preX + curX) / 2let centerY = (preY + curY) / 2//这里以前一点作为控制点,中心点作为终点,起始点为上一次的中点,很流畅啊!ctx.quadraticCurveTo(preX, preY, centerX, centerY);ctx.stroke();this.setData({preX:curX,preY:curY,})}// ctx.lineTo(x-e.target.offsetLeft, y-e.target.offsetTop)// ctx.lineTo(x, y)// ctx.stroke()},//重绘reset(){const { _ctx:ctx,_canvas:canvas } = thisthis.setData({signPath:[]})ctx.clearRect(0, 0, canvas.width, canvas.height)},//提交签名图片sure(){if(this.data.signPath.length <= 0){wx.showToast({title: '签名不能为空',icon:'none'})return }//导出图片this.outImage()},sureSignature(){if(this.data.signPath.length <= 0){wx.showToast({title: '签名不能为空',icon:'none'})return }},outImage(){const { _canvas:canvas,_dpr:dpr } = thisvar image = canvas.toDataURL("image/png"); // 得到生成后的签名base64位  url 地址payAfterTreatmentSignUp({cardNo:this.data.cardNo,signBase64:image},globalConfig.getLocalConfig().zyUrl).then(res=>{console.log(res);wx.showToast({title: '签约成功',})setTimeout(()=>{wx.navigateBack({delta: 1})},2000)})}
})

效果如下

原生微信小程序实现手写签名功能相关推荐

  1. 微信小程序实现手写签名(极简横版)

    以下代码在仅在基础库2.6版本无法正常运行,其他版本暂未测出问题. 文章目录 1.横版JSON配置 2.效果预览 3.代码实现 3.1 HTML 3.2 CSS 3.3 JSON 3.4 JS 1.横 ...

  2. 记录一下小程序的手写签名组件

    文章目录 前言 一..js文件的内容 二..json文件的内容 三..wxml文件的内容 四..wxss文件的内容 五.要引用的.wxml文件的内容 六.要引用的.js文件的内容 七.总结 前言 由于 ...

  3. AI识别 图片识别 微信小程序(手写OCR)

    使用腾讯云手写OCR API的微信小程序 GitHub地址 主要功能:识别图片形式的手写笔记并展示 //appid等作为全局变量定义在了app.js里//使用时需将相应字段添加到app.js文件中gl ...

  4. 微信小程序 手写签名_微信小程序实现手写签字

    无纸化办公,这是老板对我的要求,然而有人现场执法文件全部电子化,只有签字部分让一个搞web的人有点儿头疼,不能为了这个找个人来开发app吧于是想到了小程序,对于一个新接触小程序的人来说还是有挑战性的, ...

  5. mpvue 微信小程序api_第三方框架与原生微信小程序开发框架性能之比较 | Q荐读...

    作者 | 崔红保编辑 | 王莹 自 2017年1月9日微信小程序诞生以来,历经 2 年多的迭代升级,已有数百万小程序上线,成为继 Web.iOS.Android 之后,第四大主流开发技术. 与之相随, ...

  6. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  7. 原生微信小程序,搜索框(search)组件

    原生微信小程序,搜索框(search)组件 首先创建组件及两个跳转页面,第一个是搜索框所在的页面(首页),第二个是搜索详细页 搜索框的本质是:搜索框不是input,而是navigate,跳转到专门的搜 ...

  8. 微信小程序开发手账从入门到部署【持续更新】

    微信小程序开发手账 从今天起,打算记录一下自己从入门开发微信小程序到小程序上线的完整流程. 如果没有意外的话打算每周更新一次.20201231 准备工作 hbuilder.java环境(springb ...

  9. 原生微信小程序使用class 三元运算符实现多选案例

    原生微信小程序使用class 三元运算符实现多选案例 如下图所示: 1,在vue中开发非常容易实现,使用数组的includes方法判断即可,但是在原生小程序中不可以 2,要及时的对定义的遍历进行set ...

最新文章

  1. STM32串口第一个字节丢失问题的分析过程
  2. J.U.C系列(三)Semaphore的使用
  3. 转载:Spring AOP (下)
  4. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。...
  5. HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)
  6. Java7并发编程指南——第一章:线程管理
  7. 引擎设计跟踪(九.6) 地形最近更新
  8. 共享变量 tensorflow解读
  9. UE如何去除重复行,删除重复行
  10. 【导航仿真】基于matlab GUI PSINS导航仿真【含Matlab源码 1496期】
  11. @Autowired与@Resource的差别
  12. 基于python的学生管理系统的设计开题报告_学生信息管理系统设计开题报告
  13. 判断一个数是不是质数(素数),3种方式介绍
  14. 实数系的基本定理_1.1 实数
  15. 删除后别人的微信号变成wxid_腾讯开放微信号修改,一年一次,方法简单
  16. Python 小型项目大全 36~40
  17. Linux_标准IO
  18. ocv特性_锂离子电池的三大特性分析
  19. Android中的OpenGL使用初探
  20. 一键反推食谱,与狗对话,识别女票表情…愚人节,AI 也被玩坏了...

热门文章

  1. 15 ActionProvider代码例子
  2. 软件工程中的结构化分析方法
  3. Python开发系统实战项目:人脸识别门禁监控系统
  4. 计算机硬盘被配置成动态磁盘,Win7系统分区提示会把选定的基本磁盘转化为动态磁盘怎么办...
  5. 2022云计算技能大赛
  6. Python网络爬虫(三) 爬虫进阶
  7. 计算机桌面打开为缩小模式,电脑屏幕怎么缩小_电脑屏幕壁纸怎么缩小
  8. Java List过滤数据
  9. 抖音提取封面php,PHP 解析抖音无水印视频
  10. iphone视频格式转换