怎么通过html中的canvas来实现在线签名呢?代码分享!w3cschool笔记

Canvas是HTML5新增的元素,用于在网页上绘制图形,它由Apple在Safari1.3Web浏览器中引入,之所以对HTML扩展的原因在于,HTML在Safari中的绘图能力能为MacOSX桌面的Dashboard组件所使用,并且Apple也希望有一种方式可以在Dashboard中支持脚本化的图形。Firefox1.5和Opera9这两个浏览器也紧随Safari的引领,开始支持Canvas。

现在,Canvas标签已经是HTML5最伟大的改进之一,因为它可以让我们在不使用图片的情况下实现网页的图形设计。它就像一块画布,本身没有绘制能力,但却把绘制API展现给客户端JavaScript,我们借助JavaScript的支持,在画布范围内尽情发挥,达到想要的效果。

技术选型

这个功能无论是Canvas、SVG或是Flash,都可以实现,但是我们为什么选择了Canvas呢?

首先,由于功能上我们需要支持移动平台,所以Flash我们就可以直接弃掉,它在移动端方面并没有得到友好的支持,但Canvas和SVG都具有很好的跨平台能力,我们如何抉择,下面我们来对比一下。

两者各有自己的擅长领域,基于以上,我们选择了Canvas来实现签字功能。

下面,我们来看一下实现效果。

创建画布

首先,我们需要判断浏览器是否支持Canvas:

{isCanvasSupported(this.canvas=canvas)}height={canvasHeight}width={canvasWidth}>:对不起,当前浏览器暂不支持此功能!}我们知道,每个Canvas节点都有一个对应的context对象,我们可以通过Canvas对象的getContext()方法,直接把量字符串“2d”作为唯一的参数传递给它来获取。接下来,我们通过ref获取Canvas元素,再通过getContext()方法得到一个画布上绘图的环境。

绘制

首先绘制开始路径:

cxt.beginPath();然后设置当前线条的宽度:

cxt.lineWidth=5;设置线条的颜色:

但是,我们发现绘制的线条比较生硬

这时,我们可以通过lineCap改变线条末端线帽的样式,为每个末端添加圆形线帽,减少线条的生硬感

同时,我们还可以通过设置lineJoin,指定条线交汇时为圆形边角

但我们又发现,绘制的线条有明显的锯齿,此时我们就需要借助Canvas为我们提供的绘制元素阴影的功能来模糊边缘出现的锯齿,因为有阴影,所以我们可以适当改变lineWidth值

是不是变得圆润很多,到这里,我们绘制线路的方法已经准备完事,接下来我们来看一下怎么监听画布事件来实现连贯执行绘制吧!

监听画布事件

因为我们需要同时兼容PC端和移动端,所以我们需要事先需要判断一下对应执行的事件

this.canvas.addEventListener(this.events[0],startEventHandler,false);在startEventHandler函数中监听events[1]和events[2]事件

this.canvas.addEventListener(events[1],moveEventHandler,false);this.canvas.addEventListener(events[2],endEventHandler,false);重点来了,我们核心的内容就是计算、描绘划过的路径

moveEventHandler(event:any):void{event.preventDefault();const{ctx,isSupportTouch}=this.state;constevt=isSupportTouchevent.touches[0]:event;constcoverPos=this.canvas.getBoundingClientRect();constmouseX=evt.clientX-coverPos.left;constmouseY=evt.clientY-coverPos.top;cxt.lineTo(mouseX,mouseY);cxt.stroke();}了解Canvas的知道,Canvas画布为我们提供了一个用来作图的平面空间,该空间的每个点都有自己的坐标,x表示横坐标,y表示竖坐标。原点(0,0)位于图像左上角,x轴的正向是原点向右,y轴的正向是原点向下。

于是我们通过getBoundingClientRect()方法获得页面Canvas元素相对浏览器视窗的位置左边和顶部的像素距离,再利用clientX,clientY事件属性返回当事件被触发时鼠标指针向对于浏览器页面的水平和垂直坐标,最后通过lineTo和stroke来绘制路径。

同时,我们要记得在events[2]事件执行之后,移除events[1]、events[2]事件,否则会造成一直绘制。

endEventHandler(event:any):void{event.preventDefault();const{events,moveEventHandler,endEventHandler}=this.state;this.canvas.removeEventListener(events[1],moveEventHandler,false);this.canvas.removeEventListener(events[2],endEventHandler,false);}如此反复循环上述事件操作,我们的签字功能就基本实现了。

重新绘制

签字过程中,签错或是签的过于潦草是必不可免的,所以我们需要支持清空签字的功能,这时,我们利用Canvas的clearRect()方法就可以帮助我们清除画布区域内容。

cxt.clearRect(0,0,canvasWidth,canvasHeight);图片处理

绘制之后我们还没完事,我们还需要把绘制的签名上传保存。这时,我们可以利用toDataURL()方法将Canvas转化成一般的图像文件形式。

通常我们直接执行以操作就能转化成dataURI,然后再利用ajax请求上传就完事了。

说道html2canvas,顺便给大家一个绕坑提示,它在一些低版本浏览器截出来的图片是空白的,原因是使用了flex布局,而html2canvas并不支持-webkit-flex或-webkit-box,所以无法将HTML生成Canvas,从而导致了截出一张白屏。

解决办法:

通过以上几步,我们就基本实现了在线签名的功能。值得注意的是,这个项目我们使用的React+TypeScript环境构建,上述代码的实际使用需要结合自己环境进行适当修改。

文中使用的是Canvas比较浅层的绘制知识,如果想利用Canvas进动画制作、物理效果模拟、碰撞检测、游戏开发、移动应用开发、大数据可视化开发,还需要我们复习一下之前学过的数学几何、物理方面的知识,然后在慢慢摸索。现在很多成熟的图表插件都是用Canvas实现的,例如Chart.js、ECharts等,里面很多好看炫酷的图表,几乎覆盖了所有图表的实现。Canvas还有很多开源类库,例如ZRender、createJS、Pixi.js等,ECharts底层也是依赖轻量级的Canvas类库ZRender进行封装的。

THE END
1.腾讯表格在线签名方法您是否经常遇到需要在线签名的表格,但又不知道如何操作?不用担心!本文将为您详细介绍腾讯表格的在线签名方法,让您轻松解决这个问题。 方法一:使用手写签名 第一步:打开腾讯表格并选择需要签名的单元格。 第二步:点击工具栏上的“插入”选项。 第三步:在弹出的菜单中选择“手写签名”。 https://www.huoban.com/news/post/154753.html
2.如何在电子文档上签名(在线手写签字怎么弄)电子合同我们在工作和生活中可能会遇到这样的情况,需要在声明函或其它在线文件中填加自己的手写签名,要怎么操作呢,本文来科普如何在电子文档上签名,在线手写签字怎么弄。 如何在电子文档上签名 现在很多文件签名都要保障有效性,所以可以制作一个「可靠的电子签名」以备不时之需。在法大大只需注册并认证即可生成本人的签名,https://m.fadada.com/notice/detail-20863.html
3.在线文档怎么签名字,三种简单方法教你一步步完成签名如果你喜欢传统的手写签名,你可以使用扫描仪来将你的签名扫描到在线文档中。按照以下步骤进行操作: 准备一张白纸,并在上面用签字笔写下你的签名。 将签名所在的纸张放在扫描仪上,启动扫描仪软件。 选择扫描仪中的“扫描签名”选项,并按下扫描按钮以开始扫描。 https://bbs.wps.cn/cms/mFqjULKI.html
4.电子签名怎么写到到文档中去?电子签名使用教程如今电子签名成为了公文、合同和其他文件签署的常见方式。与传统的纸质签名相比,电子签名更加方便、快捷,并且具有法律效力。下面将以腾讯电子签平台为例介绍电子签名怎么弄到文档中去? 我们先登录腾讯电子签的企业平台,进入待办中心 > 待我处理 > 合同签署的待办事务。 https://qian.tencent.com/document/news137838951334813696/
5.上海企业登记在线电子签名认证怎么操作注册公司随着数字化时代的到来,电子签名已成为企业日常运营中不可或缺的一部分。本文将详细介绍上海企业登记在线电子签名认证的操作流程,帮助您轻松完成电子签名认证。 一、什么是电子签名认证? 电子签名认证是指在电子文档上附加的,能够代表签名者身份和意图的电子数据。根据《中华人民共和国电子签名法》,电子签名具有与手写签名https://blog.yyzq.team/post/440130.html
6.apk在线签名手机版本怎么下载?下面我将为您介绍一种基于手机的APK在线签名的方法,该方法可以帮助用户在手机上进行APK签名操作。 一、手机版本APK签名工具的原理 手机版本的APK签名工具基本原理是通过调用系统的签名API来实现APK的签名操作,其核心是使用了Android系统中的一个功能——PackageManager。PackageManager是一个提供了管理应用程序包信息的类,https://www.yimenapp.com/kb-yimen/60045/
7.一键logo设计怎么设计自己的签名?个性签名设计在线分享个性签名设计在线分享 设计个性化的签名是展示出独特个性的绝佳途径之一,无论是用于电子邮件、社交媒体还是文书信函,一个独特的签名可以让你的信息更加突出、更具个性魅力。但是,怎样设计才能让你的签名更加与众不同呢?不清楚如何操作的小伙伴也不要焦急,本文接下来就分享设计个性签名的方法,让我们一起来探讨下如何设计https://www.xunjiepdf.com/25693
8.手机电子签名怎么做完成实名认证后,你需要设置接收签署消息的方式。手机电子签名平台通常支持短信、电子邮件和微信等多种通知方式。你可以根据自己的需求选择合适的通知方式,并确保接收信息的手机号码、邮箱或微信号与平台注册信息一致。 **四、在线签署** 当收到签署消息后,你可以按照平台的指引进行在线签署。具体操作可能因平台而异,但https://g.pconline.com.cn/x/175/17592515.html
9.怎么把图片上签名提取出来但是需要注意的是,寻求专业帮助可能会收取一定的费用,并且需要提供原始图片或者协助专业人士完成相关操作。 总结 无论是使用Photoshop、在线提取工具还是命令行工具,提取图片上的签名都不再是难题。你可以根据自己的需求和技术水平选择合适的方法,轻松地提取出图片上的签名。希望本文介绍的方法能够帮助到你,祝你提取签名顺https://tool.a5.cn/article/show/36961.html
10.微信解封在线签名失败怎么办(微信解封在线签名失败怎么办呢)微信限制解除在线签名怎么点不了了呀 网络的问题。微信限制解除在线签名点不了属于网络问题,更换稳定的https://www.51jiefeng.com/thread-15541-1-1.html
11.NBANBAhttp://nba.sohu.com/
12.金蝶云星空新版业务审批的扩展操作 移动附件V 7.5_在线预览(集成OfficeWeb365第三方预览服务) 文件服务.新增特性.金蝶云星空对接OfficeWeb365第三方预览服务 钉钉平台支持业务审批移动应用的讨论功能 业务审批轻应用增加个人设置,提供审批路线排序、审批完成后跳转方式可选择。 https://vip.kingdee.com/article/182126
13.如何用canvas实现在线签名的示例代码html5网页制作随着计算机和网络技术的飞速发展,在线签名技术越来越多的被应用在无纸化办公中,这种直观便利的操作不仅可以大幅提升办公效率,而且使用数字化存储方式,避开了传统的纸质签字存储查阅困难等问题。在我们在日常生活中,已经有很多场景使用在线签名技术,例如:pos机刷卡签字、快递签收签字、银行或机关单位业务办理签字等。最近在https://www.jb51.net/html5/624184.html
14.电子签名在线生成器软件在线生成电子签名电子签名制作软件多特软件园为您整理了多款电子签名在线生成器软件软件,在多特您能下载多款正规的、无毒软件,其中有在线签名设计免费生成器、连https://www.duote.com/zt/dzqmzxscqrj/