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.个性签名设计师下载2024安卓最新版手机app官方版免费安装下载签名,设计签名,签名,签名设计,个性签名,心情签名,,分享生活,艺术签名,商务签名,专家设计签名,海量签名尽在这里《个性签名设计师》是一款个性签名语录与说说分享的APP。专家设计签名,中国艺术签名设计协会鼎力支持,著名设计师手工设计签名,让您拥有属于自己气质个性的艺术签名;丰满的个性签名段子时刻体现生活态度,轻轻一点https://www.wandoujia.com/mip/apps/6595975/
2.签名软件下载电子签名软件手机签名软件下载为您推荐:签名设计软件、logo设计软件、名片设计软件 更新时间:2024-12-01 16:15:03 安卓 一笔签名设计软件 24.28M / 2021-10-11 / v0.8.4 安卓版 评分: 下载 一笔签名设计免费版是小编为大家寻找的一款签名设计软件,里面的所有功能都可以免费使用,大家可以在里面看看自己的名字设计成签名到底怎样;选出自己http://www.downyi.com/key/qianmingruanjan/
3.在线签名生成器免费,rpa,机器人,自动化艺术字网一笔签名设计免费版在线 艺术字2024年5月18日?·?一笔签名设计免费版在线,艺术字网出品,极品连笔艺术字签名转换器。 一笔签名设计转换器:一笔签,即签署姓名时飘逸潇洒,一气呵成,给人以酣畅淋漓的视觉冲击。更多内容请查看http://www.yishuzi.com/b/13.htm https://www.wdlinux.cn/html/email/20241211/23845.html
4.微信小程序做电子签名功能微信小程序做电子签名功能 文章目录 最近需求要做就记录一下。 人狠话不多,直接上功能: 直接搂代码吧,复制过去就可以用,有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --><custom-navbartitle="电子签名"show-home="{{false}}"/><viewclass="signature-page"><!-- 顶部操作栏 --><viewhttps://blog.csdn.net/weixin_43106777/article/details/144391534
5.2023免费设计艺术签名多种模式微信小程序源码带流量主某交易网站上卖500元的源码,免费设计艺术签名,支持微信流量主,喜欢的小伙伴可以玩玩! 搭建安装教程参考: 微信小程序搭建开发、修改调试、编译打包上线使用教程 程序演示图: THE END 微信小程序 喜欢就点个赞再走呗~ 6赞赏 说点什么抢沙发 说点正能量的内容吧 https://www.yizhanzzw.com/34447.html
6.签名LOGO设计免费生成器签名LOGO免费设计在线生成标智客签名LOGO在线设计软件为企业在线生成签名LOGO图片,提供签名品牌标志生成模板、签名标志图片素材下载,是LOGO免费在线生成平台!https://www.logomaker.com.cn/logo/tag/5740/
7.艺术签名助手小程序二维码艺术签名助手小程序入口分类:系统 发布:2017-02-07 搜索词:艺术签名助手 提示:若暂无二维码,请复制搜索词在微信搜索。 微信扫一扫,使用小程序 请使用微信6.5.3以上的版本详情 相关 艺术签名助手小程序二维码是艺术签名助手微信公众账号当中的艺术签名助手小程序入口。艺术签名助手小程序简单好用,可以帮你快速的设计一个个性签名,想用就http://www.onlinedown.net/miniapp/361.htm
8.实用的推广工作计划10篇1. 社交媒体推广:在微博、微信等社交媒体上发布小程序的介绍、安装链接等信息,结合小程序功能设计专门的`社交营销策略,为用户提供定向推荐和信息流营销等服务。 2. 用户引导策略:通过各种引导界面、提示信息、小程序入口等方式,引导用户识别和使用小程序,增加宣传和使用率。 https://www.unjs.com/fanwenwang/gzjh/20220403214251_4950577.html
9.腾讯文档登录入口:https://docs.qq.com/(使用指南)腾讯文档可以在哪里找到使用入口? 1)电脑web端:进入「https://docs.qq.com/」页面后,点击「 立即使用 」--使用 QQ/微信/企业微信 登录即可; 2)电脑&手机&iPad客户端:移步「https://docs.qq.com/home/download」即可下载使用。 3)手机端小程序: https://www.dongrv.com/a/15770/
10.9月15日抢先服版本更新公告小提示:本次更新前,为了不再发生召唤师们在线时突然关闭服务器而遭受不必要的损失,我们将在更新前半小时(约9月15日7:30)关闭抢先服PVP入口! 【更新内容】 新英雄·海月 上线抢先服 职业定位:法师 【英雄内核】 云中漠地流传着这样一个传说:蝶之所至,心愿皆成,黄沙尽醒,万物俱生。 https://new.qq.com/rain/a/20220914A0APIM00
11.某站卖500块钱的艺术签名设计小程序程序员阿鑫某站卖500块钱的艺术签名设计小程序 某交易网站上卖500元的源码,免费设计艺术签名,支持微信流量主 文件下载: 您需要登录/注册后才能查看相关资源https://www.cxyax.com/?post=1350
12.无聊写的小玩意,签名设计小程序1.0版本,发出来给大伙玩玩楼主用的应该是这个网站的效果图:http://m.uustv.com/ 其实随便搜索,有很多免费在线签名设计 https://www.52pojie.cn/thread-1336451-1-1.html
13.公众号预约小程序申请短信签名华为云帮助中心为你分享云计算行业信息,包含产品介绍、用户指南、开发指南、最佳实践和常见问题等文档,方便快速查找定位问题与能力成长,并提供相关资料和解决方案。本页面关键词:公众号预约小程序。https://support.huaweicloud.com/topic/339790-4-G
14.设计签名小程序制作软件(设计你的签名小程序篇)设计签名小程序制作软件是一款方便快捷的工具,可用于创建个性化的签名小程序。本文将从四个方面详细阐述设计签名小程序制作软件的特点和功能,包括界面设计、自定义选项、数据管理和云端部署。通过对这四个方面的介绍,读者可以了解到设计签名小程序制作软件的优势和应用场景,从而引起读者的兴趣。 https://www.ahbfapp.com/news/1985.html
15.基于微信小程序的连连看小游戏的设计与实现23000.docx基于微信小程序的连连看小游戏的设计与实现 23000.docx,经典专科、本科、硕博、研究生、期刊毕业论文 仅供参考 精心整理 仅供参考 勿用作商业用途 毕业设计(论文) 题目(中文):基于微信小程序的连连看小游戏的 设计与实现 (英文):Design and Implementation ofhttps://max.book118.com/html/2020/0908/8045032063002141.shtm
16.才签爱手写(手写签名设计)是一个关注手写相关的设计师交流以及变现的原创设计平台,包括手写签名、手写logo、手写文案等方面的纯原创类型的网站。欢迎相关设计师入住,一起共赢。免费提交姓名有机会获得高端签名。https://www.aishouxie.cn/
17.签名设计,免费签名设计,手写LOGO设计,手写招牌设计,手写文字设计手写仔是一个关注手写相关的设计师交流以及变现的原创设计平台,包括手写签名、手写logo、手写文案等方面的纯原创类型的网站。欢迎相关设计师入住,一起共赢。免费提交姓名有机会获得高端签名。https://shouxiezai.com/
18.配音在线生成免费人工智能名片在线制作免费生成?二、人工智能名片在线制作免费生成? 1、手机登录个人微信页面,然后依次查找到“发现”——点击“小程序”。 2、在右上角的小放大镜处——搜索框输入“名片”。 3、在搜索下拉框会出现多种可以创建微信小程序名片的小程序,这时候我们只需要选择第一个“名片”或者你喜欢的小程序即可创建属于自己的微信小程序名片。https://tool.a5.cn/article/show/72608.html
19.免费设计你的专属艺术签名!#点击左下角#输入你的名字自动生成你首页 推荐 关注 朋友 我的 直播 放映厅 知识 游戏 二次元 音乐 美食 紫蓝 作者 免费一键生成你的专属艺术签名入口[比心] 8月前·湖北 0 分享 回复 紫蓝 作者 点击左下角蓝色小雪花入口进去免费生成你的专属艺术签名[比心][比心][比心][比心] https://m.douyin.com/share/video/7349483571431640329
20.微信小程序定制开发郑州沃之涛科技有限公司,致力于网站开发、网站优化、网站推广、竞价托管、APP开发、wordpress插件开发、公众号开发、小程序开发等。 我们是从一个打工仔,逐步为自己梦想而走到一起的小团队,我们愿意用我们的服务品质,去决定我们的未来。 我们在成长的道路上需要很多合伙商的朋友来帮助我们走向未来,我们要用过硬的技术https://www.seohnzz.com/page/24/
21.微信小程序官网登录入口腾讯云开发者社区image.png 开发接口 登录 wx.login wx.checkSession 签名加密小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系登录流程时序小程序,开发者服务器,微信接口服务 wx.login()获取code wx.requhttps://cloud.tencent.cn/developer/information/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%AE%98%E7%BD%91%E7%99%BB%E5%BD%95%E5%85%A5%E5%8F%A3
22.房产小程序房产中介软件易房大师易房大师的小程序微店服务,是房产中介公司打通线上线下客户服务的移动通道,多样化的营销渠道,让拓客变得更简单。通过房产小程序微店,中介公司可以给客户提供房源查询、买卖租赁在线委托等服务,满足中介公司产品服务展示和拓客的核心业务需求。微信作为超级入口,公众号+中介微店+小程序,助力房产中介企业打造自己的营销生态体系http://www.eeeff.com/service/xiaochengxu/
23.公众号运营方案吉达简介、吉达特色、旅购宝入口、线路推荐、加入会员、旅行宝典、优惠信息、公司门店、合作加盟、招聘信息等 3.功能设计 留言功能:粉丝可以评论文章,发表意见 客服功能:实时回复粉丝咨询及评论,跟粉丝互动; 小程序链接功能:以后开发旅购宝小程序,可添加在菜单栏或文章里; https://www.ruiwen.com/yunyingfangan/8305763.html
24.小程序登录java怎么验签在小程序登录过程中,为了保证请求的合法性和安全性,需要对请求进行验证。本方案将介绍如何在Java后端实现小程序登录验证的过程。 2. 方案设计2.1 生成签名 在小程序端,用户需要使用登录凭证code向服务器发起登录请求。服务器端接到请求后,需要先生成签名验证请求。 https://www.tulingxueyuan.cn/tlzx/jsp/5303.html
25.抖音不露脸直播项目,签名头像设计小白均可学会日入200+参加小程序计划,引导粉丝到小程序取图,CPS广告变现。 5、抖音橱窗变现:大家都知道喜欢捣鼓头像的人,一般都是16-30岁左右的年轻人,现在年轻人喜欢时尚,所以可以在橱窗上挂各种衣服、鞋子,首饰、等等的 设备要求:手机电脑都可以,最好有台电脑,效率高 抖音不露脸直播项目,签名头像设计小白均可学会日入200+ 网盘下载https://www.zhumengwl.com/2022/0906/16946.html
26.免费建站小程序开发微信网页制作建站学院提供建站,免费建站,小程序,微信网页,建站学院,建站培训相关的服务和信息,并免费为大家提供建站教程和工具。https://xy.ev123.net/
27.白姐一吗期期中特(2024已更新微信/小程序)签名设计大师是一款签名设计的软件,为用户快速设计个人艺术签名。内设上百种签名字体,包含商务签名、大师签名、一笔签名、总裁签名、防伪签名、英文签名、长横白姐一吗期期中特签名、明星签名、楷签名、长横签名、蝴蝶签名、连笔签名、花体签名、爱心签名、等全市白姐一吗期期中特场签名字体类型。 https://www.gfan.com/gftcpavleurct.html
28.免费为你设计属于你的艺术签一字签的软件是专门找人或是在某些小网站上设计的,我也试过有些小网站,在小网站上设计的样式虽然多,但是大多不好看,好看的要付费,要么就干脆设计都要付费的这种,反正就是免费的设计不到好看,今天就为大家带来一款免费为你设计属于你的艺术签、一字签的软件,主要功能就是:免费设计一字签、艺术签,艺术签、一字签在线一键生成,https://mznzd.com/cqkj/1121.html