TaroReact小程序实现签名功能完整版本篇文章我们完整的实现一个签名功能,包括从绘制到显示的所有代码,使用T

在开始写码之前先简单介绍一下我这里的设计,一共分为三层:

咱们首先来实现最核心的canvas组件。

因为小程序的api很多还是回调形式的,Taro也不例外,所以先来把两个主要操作转换成图片和获取尺寸封装成async形式:

接下来看一下jsx部分:

index.module.less

.container{position:relative;overflow:hidden;//用于绘制签名的canvas占满全屏.signCanvas{width:100vw;height:100vh;overflow:hidden;}//把旋转内容的canvas藏起来.saveCanvas{position:absolute;top:-600px;left:0;z-index:-1;}}3、初始化canvas接下来完成初始化工作,简单来说就是把canvas的绘图上下文拿到手,然后配置一些线条颜色粗细等。如果你想添加一些默认的提示文字也可以在这里完成。

由于我的签名组件是全屏显示的,所以这里直接把SystemInfo的屏幕长宽赋值给canvas了,这里有一个很难缠的轨迹绘制偏移问题,下面会细讲。

ok,现在来搞一下绘制的核心逻辑,其实很简单,我们在上面的jsx里可以看到一共监听了两个方法:onTouchStart和onTouchMove,思路很简单:

说白了就是绘制一条折线,折线的圆润程度取决于onTouchMove的触发频率,对应代码如下:

//绘制轨迹信息constlineInfo=useRef({startX:0,startY:0});constcanvasStart=(e)=>{e.preventDefault();lineInfo.current.startX=e.changedTouches[0].clientXlineInfo.current.startY=e.changedTouches[0].clientYcontext.current.beginPath()}constcanvasMove=(e)=>{e.preventDefault();letx=e.changedTouches[0].clientXlety=e.changedTouches[0].clientYcontext.current.moveTo(lineInfo.current.startX,lineInfo.current.startY)context.current.lineTo(x,y)context.current.stroke()context.current.draw(true)lineInfo.current.startX=xlineInfo.current.startY=y}这里我们使用useRef保存上个坐标信息而不是useState,原因在于我们是直接和canvasapi交互的,没必要在react层面再添加一个高频的重渲染操作。

并且注意其中的e.preventDefault(),如果不阻止默认行为的话每次触摸开始都会有一个拖拽屏幕的效果。

至此,我们已经完成了核心的签名功能:

这个还不是固定偏移,而是越往右下角偏移的越大,所以很多人初见都会一脸懵逼。去网上搜了搜,按照教程里的做法设置了canvas长宽之后发现还是没解决,很难受。这里就来详细的说明一下。

导致这个问题的核心是:canvas的DPI和屏幕的DPI不同!

为了理解这个问题,我们先来做个小实验,首先回到上面的样式文件里,把canvas组件的长宽从全屏设置为四分之一屏:

.container{//...//用于绘制签名的canvas占满全屏.signCanvas{//把下面这俩从100改为50width:50vw;height:50vh;overflow:hidden;}//...}然后回到浏览器再试一下:

发现了么?绘制出来的笔迹恰好是我们实际触摸位置的四分之一!打开F12看一下:

这里可以看到Taro的Canvas组件由一个外层的html元素和内部的原生canvas构成,外层的taro-canvas-core容器负责监听touch事件,而内部的原生canvas负责绘制内容。还记得之前我们代码里初始化canvas时赋值的长宽么:

useReady(()=>{constquery=Taro.createSelectorQuery()query.select('#myCanvas').context(res=>{if(!res.context)return//————————————————注意这里————————————————const{windowWidth,windowHeight}=Taro.getSystemInfoSync()res.context.canvas.width=windowWidth;res.context.canvas.height=windowHeight;//...}).exec()})在这里我们把整个window的宽高赋值给了canvas,也就是说。在只有四分之一面积的情况下,canvas里塞下了和整个屏幕一样多的像素点!

这下就清晰了,touch事件传给我们基于屏幕的坐标,而canvas的分辨率和屏幕一样,但是尺寸只有屏幕的四分之一(即刚才提到的DPI不一致),所以绘制出来的线条就是我们实际触摸轨迹的四分之一等比映射。

明白了原因想解决就简单了,既然实际尺寸是四分之一,那我们把canvas的分辨率也设置为屏幕的四分之一,或者把touch事件的坐标放大为原来的两倍,保证canvas和屏幕的DPI是一致的就可以:

方法一:缩小canvas分辨率

useReady(()=>{constquery=Taro.createSelectorQuery()query.select('#myCanvas').context(res=>{if(!res.context)returnconst{windowWidth,windowHeight}=Taro.getSystemInfoSync()//把canvas分辨率也改为四分之一res.context.canvas.width=windowWidth/2;res.context.canvas.height=windowHeight/2;//...}).exec()})效果如下:

方法二:放大touch事件的坐标:

constcanvasStart=(e)=>{e.preventDefault();//——————————看后面的乘以2——————————lineInfo.current.startX=e.changedTouches[0].clientX*2lineInfo.current.startY=e.changedTouches[0].clientY*2context.current.beginPath()}constcanvasMove=(e)=>{e.preventDefault();//——————————这里也乘以2了——————————letx=e.changedTouches[0].clientX*2lety=e.changedTouches[0].clientY*2//...}效果如下:

可以看到,笔迹已经跟手了,并且我们还可以注意到,由于方法二的分辨率更高,所以他的笔迹更细腻一点。

这个笔迹偏移问题的核心在于canvas和屏幕的DPI不匹配,所以说我们单纯抄网上教程的配置是没什么用的,你需要根据自己的canvas宽高来配置,例如UI让你把签名区域设置为100%宽度,80%高度。你在css里写width:100vw;height:80vh;,那么在初始化canvasContext的时候你就需要canvas.height=windowHeight*0.8;

简单说就是style里的宽高比例要和canvas的实际像素比例相同。

现在基本的逻辑都完成了,再把一些交互的api封装好,通过forwardRef转发出去就可以了,组件完成代码如下,导出图片的逻辑在saveAsImage,有兴趣的同学可以读一下:

上面的签名canvas组件可以拿到其他小程序项目里用,而现在要做的这个组件就是用来实现本项目的UI需求的,这部分没什么难点,直接贴代码了:

src\pages\sign\index.tsx

.container{position:relative;.btns{position:absolute;top:0;left:0;width:100vh;transform-origin:00;//注意这里,手动把按钮组横了过来transform:rotateZ(90deg)translateY(-100%);display:flex;justify-content:center;padding:32px0px;.btn{margin:0px16px;width:20vh;}}}因为小程序内置的横屏会把标题也横过来,导致签名区域变窄,所以这里选择手写横屏而不是直接用小程序内置的横屏配置。

并且注意onSubmit中,从routerparams里读了一个type,然后把导出的签名图base64发射到名字为type的事件上。所以说,想要发起签名的页面需要在导航到本页前先通过Taro.eventCenter绑定一个事件,然后把事件名字通过routerparams(即type变量)告诉签名页,这样让双方可以进行签名图的传递。

最后,我们来实现如何发起签名和如何接受并显示得到的签名图:

这里需要注意的是,我用的是Taro内置的Image组件,而不是taro-vant的Image,因为这里有个小坑,taro-vant的Image没法直接显示base64图片,没找到原因,Taro的Image就可以。

THE END
1.手机上怎么进行电子签名在手机上可以通过微信小程序进行电子签名,本视频通过华为手机来演示,具体的操作步骤如下:1 打开微信进入小程序 打开手机微信,进入小程序搜索界面。 2 输入好签点击进入 在搜索框内输入好签,并点击进入。 https://zhidao.baidu.com/question/1250499843872615019.html
2.十大签名软件推荐电子签名软件哪个好好用的签字软件有哪些→其功能丰富,玩法多样,具有连笔签、艺术签、极简签、明星签、行楷签、一笔签、可爱签、霸气商务签、总裁签、敬业签等各种风格,可免费生成个人签名,可在线定制大师签名,还能个性定制情侣签(心心相印签/情投意合签/白头偕老签/甜蜜浪漫签/两小无猜签等)、可爱签、中英文签、多字签等。https://www.maigoo.com/top/419818.html
3.线上签字软件有哪些线上签字APP推荐软件中还有签名库里面保存了自己手写过的所有签名,而且自己签署过的文件也都会一一罗列在软件中。 以上就是小编为大家介绍的计划可以线上签字的软件,这些APP除了都具有签署功能以外,还都能对合同进行管理,大家在以后用的到的时候能够直接打开软件就找到。大家选择合适的一款下载吧。https://m.wandoujia.com/strategy/6086106346296303148.html
4.微信小程序API用户数据的签名验证和加解密微信小程序作为一款轻量级的应用,其安全性也备受关注,为了保证数据的安全性,微信小程序提供了一套完整的API来对用户数据进行签名验证和加解密,本文将详细介绍微信小程序API中的用户数据签名验证和加解密技术。 用户数据的签名验证 1、1 为什么需要签名验证? https://www.kdun.com/ask/505821.html
5.设计签名小程序制作软件(设计你的签名小程序篇)设计签名小程序制作软件是一款方便快捷的工具,可用于创建个性化的签名小程序。本文将从四个方面详细阐述设计签名小程序制作软件的特点和功能,包括界面设计、自定义选项、数据管理和云端部署。通过对这四个方面的介绍,读者可以了解到设计签名小程序制作软件的优势和应用场景,从而引起读者的兴趣。 https://www.ahbfapp.com/news/1985.html
6.在线签合同的小程序(文档在线签名怎么弄)电子合同电子签名小程序可以让用户在微信内直接完成合同文件签名操作,提高合同签署的效率和便捷性,在线签合同已经融入人们日常工作生活的方方面面。那么,在线签合同的小程序?文档在线签名怎么弄? 在线签合同的小程序 目前比较流行的在线签合同的小程序有【法大大】,法大大是正规的电子合同与电子签名服务平台,致力于为企业、政府https://www.fadada.com/notice/detail-16731.html
7.微信电子签名小程序开发需求介绍个人签名:个人在社交平台上的签名也可以通过电子签名小程序进行创建和应用,增加个性化和艺术性。 总结 微信电子签名小程序的开发旨在为用户提供一种便捷、安全、可靠的电子签名解决方案。通过提供用户认证、电子签名创建、文件上传、安全保障、存储和管理等功能,该小程序适用于合同签署、表单填写、授权文件等多种使用场景,https://www.xhl8.cn/a/2917.html
8.钉钉小程序实现签名板古茗目前已经有近万家门店了,为了对门店做规范管理,会进行巡店且输出巡店报告,此时就需要有一个老板签名的功能,证明老板认可且了解当前结果。由于我们巡店用到的是钉钉小程序,所以下面将会为大家展示如何在小程序中实现一个签名板功能。 设计实现 为了实现签名功能,需要用到 canvas,我们翻阅钉钉 api 文档,发现支持Canvahttps://www.pipipi.net/36779.html
9.手机怎么制作电子签名小程序怎么制作电子版电子签名接亲网签字完成后,手机会自动保存PDF格式并跳转到“已签文件”页面,此时呢,我们选中签署的文件可以通过微信、QQ等多种形式分享给第三方。 三、电子签名小程序有哪些 目前主流的电子签名小程序有【法大大】,法大大是正规的电子合同与电子签名服务平台,致力于为企业、政府和个人提供基于合法数字签名技术的电子合同和电子单据的https://www.jieqinwang.com/baike/detail_121626
10.小程序支付java下单签名mob6454cc68daf3的技术博客文章标签小程序支付java 下单签名调用支付jsapi缺少参数appid调用支付jsapi缺少参数package微信支付数据文章分类Java后端开发 一、准备工作 1.已经申请小程序,获取小程序 AppID 和 Secret 在小程序管理后台中,【设置】 →【开发设置】 下可以获取微信小程序 AppID 和 Secret。 https://blog.51cto.com/u_16099217/11650318
11.初探小程序渗透Sign签名破解刚了解小程序渗透,碰到的第一个小程序就具有请求参数的 Sign 签名校验,那么就学习一下如何破解它。为了让这个过程显得完整,也写下了解密、反编译和抓包等小程序渗透的前期工作。最后,编写一个 burpsuite 插件实现自动篡改 sign 签名。 小程序的解密、反编译和抓包在网上已经有很多文章讲述得很详细,这一部分我就只写https://xz.aliyun.com/t/13690
12.微信小程序实现电子签名功能微信小程序签名资源微信小程序canvas画板是开发在线手写签名功能的重要工具,它允许用户在手机屏幕上进行自由绘制,模拟实际的签名过程。这一技术的核心在于利用小程序的canvas原生组件,结合JavaScript来实现画布上的各种交互操作。 微信小程序开发服务合同 浏览:87 3星 · 编辑精心推荐 https://download.csdn.net/download/weixin_38517105/12924661
13.奇安信攻防社区测试小程序的逻辑漏洞经常会遇到sign签名标识,若不知道sign的生成方式,只篡改参数的值无法修改sign的值,那么漏洞测试就很难进行下一步。本篇分享将围绕如何绕过小程序sign标识展开 漏洞前言: 测试小程序的逻辑漏洞经常会遇到sign签名标识,若不知道sign的生成方式,只篡改参数的值无法修改sign的值,那么漏洞测试就很难进行https://forum.butian.net/index.php/share/2342
14.微信小程序API用户数据的签名验证和加解密微信小程序API 用户数据的签名验证和加解密用户数据的签名验证和加解密数据签名校验为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名。开发者可以根据业务需要对?http://www.niuguwen.cn/shouce/art-1198.html
15.公司注册程序流程图是怎样的?公司注册方法是什么注册问题4、法人股东在广州一网通微信小程序签名 申请人,通过自己的个人微信,搜索“广州一网通企业开办”小程序,完成个人认证后,进入待签署文件。 5、审批(一个工作日)通过审核可以先制法人章 各部门在平台同步联办,审核已提交资料。如通过可以等待通过短信,如不通过将会收到不通过原因的回复,这时就要重新修改申办信息重新提交https://www.wen51.com/news/show/207098/
16.艺术签名源码字节跳动小程序开发抖音艺术签名小程序源码艺术签名设计小程序源码.zip 字节跳动小程序开发抖音艺术签名小程序源码艺术签名设计小程序源码 最新字节跳动小程序抖音艺术签名小程序源码/艺术签名设计小程序源码 这个小程序是一个非常有用的工具,可以帮助您创建各种各样的艺术签名,以便在社交媒体平台上展示您的个性和创意。https://www.iteye.com/resource/q431231353-5290647
17.记一次反编译小程序寻找签名函数并联动bp插件自动化加签{小程序ID}\),而我们这边可以去拖安卓端的小程序包,这里需要提前准备好一个已经root过的安卓手机或者是一个安卓模拟器,先去/data/data/com.tencent.mm/MicroMsg/{一串16进制字符}/appbrand/pkg 这个目录下将其他小程序包都删除掉,然后再打开微信加载我们需要测试的目标小程序,此处注意,一定要等小程序完全打开https://zone.huoxian.cn/d/1052-1052-bp
18.微信小程序实现手写签名的示例代码在微信小程序上实现手写签名,获取canvascontext新版本和旧版本有点坑,新版本在获取canvas后如果页面有滑动,则签名坐标出现异常(在微信开发者工具上会出现2022-2-17),但是在真机上即使滑动也不会出现异常,为了防止出现问题,暂时使用旧版本获取canvascontext https://www.finclip.com/news/f/68852.html
19.小程序申请应用签名怎么弄在申请小程序应用签名之前,您需要先注册微信开放平台账号。如果您已经有了微信公众号账号,则可以在公众号后台直接注册。 2. 进入小程序管理后台 在注册成功后,登录微信开放平台账号,进入小程序管理后台,点击“开发”-“开发设置”-“工具”-“工具密钥”,进入应用签名申请页面。 https://www.guangli88.com/news/industry/142843.html
20.签名一个使用插件1。3版的Java小程序打包java小程序 使用jarsigner和你的rsa证书签名你的小程序,小程序必须打包成jar文件。jar工具也 可以在jdk里找到。 例如c:>c:\jdk1.3\bin\jar cvf c:\testapplet.jar . added manifest adding: testapplet.class (in = 94208) (out= 20103)(deflated 78%) https://www.west.cn/www/info/14091-1.htm
21.微信小程序验证签名失败,完整的解决步骤今天开发微信小程序,需要用到统一下单接口,测试过程中,就出现了这样的错误。于是打印出错误提示,是这样的(php程序): array(2) { ["return_code"]=> string(4) "FAIL" ["return_msg"]=> string(30) "错误的签名,验签失败" } 第一步,先去商户后台,验证相关信息 https://m.yelangcn.com/view/1828.html
22.微信10年,我盘点了100个实用操作!apppc端借助第三方小程序「个性签名居中」,将个人信息页的个性签名上传生成居中文字,花里胡哨但确实好玩。 ⑩ 图片评论 图片评论,曾经上线过两天,引起巨大轰动,灰度测试后决定下线这个功能,至今觉得很遗憾,毕竟那两天朋友圈就跟过年了一样热闹。 但不要紧,借助第三方工具,我们可以实现“微博版”的网址链接图片评论,原理就是https://www.163.com/dy/article/G0RMVDB10525KO0P.html
23.河南企业登记全程电子化服务平台企业电子营业执照签名操作手册电子营业执照签名是使用电子营业执照小程序进行扫码签名。电子营业执照小程序可以在“微信小程序”或“支付宝小程序”中搜索“电子营业执照”进行应用。企业法定代表人/负责人,通过刷脸实名验证后,可下载自己名下或授权的企业电子营业执照(电子营业执照相关功能及操作详见附件:电子营业执照用户使用手册)。https://www.dongrv.com/chuangyezhishi/12620.html
24.精品特价最新微信抖音艺术签名小程序源码2种激励广告策略最新字节跳动小程序抖音艺术签名小程序源码/艺术签名设计小程序源码,这个小程序是一个非常有用的工具,可以帮助您创建各种各样的艺术签名,以便在社交媒体平台上展示您的个性和创意。https://ext.dcloud.net.cn/plugin?id=15623
25.小程序手写签名(wepy)对于手写签名组件组件晚上有很多种写法,我选择了一种进行了wepy的框架的改造。如果使用wepy框架做手写签名的话可以直接复制下面的代码。 这里需要提醒的是:安卓手机和苹果手机有适配性的问题,苹果手机在签名的以后手机将无法进行文档的上下左右的滑动,而安卓手机没有影响。解决这个问题的方法是给canvas给disable-scroll属性https://www.jianshu.com/p/952169f45871/
26.微信小程序实现电子签名功能的方法创新互联这篇文章主要讲解了微信小程序实现电子签名功能的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。成都创新互联是一家专业提供原阳企业网站建设,专注与成都网站制作、成都做网站、H5场景定制、小程序制作等业务。10年已为原阳众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中http://chengdu.cdxwcx.cn/article/doiiid.html
27.微信小程序实现手写签名(签字版)javascript技巧这篇文章主要为大家详细介绍了微信小程序实现手写签名,签字版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】本文实例为大家分享了微信小程序实现手写签名的具体代码,供大家参考,具体https://www.jb51.net/article/254636.htm