前端实现电子签名(web、移动端)通用

这篇具有很好参考价值的文章主要介绍了前端实现电子签名(web、移动端)通用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开启生长之旅!这是我参加「日新方案 12 月更文挑战」的第15天,点击检查活动概况

前语
在现在的年代发展中,从以前的手写签名,逐步衍生出了电子签名。电子签名和纸质手写签名一样具有法令效应。电子签名现在主要还是在需求个人确认的产品环节和司法类相关的产品上较多。

举个常用的例子,咱们都用过钉钉,钉钉上面就有电子签名,信任咱们这肯定是知道的。

那作为前端的咱们怎么完成电子签名呢?其实在html5中现已呈现了一个重要级别的辅佐标签,是啥呢?那就是canvas。

什么是canvas
Canvas(画布)是在HTML5中新增的标签用于在网页实时生成图画,并且能够操作图画内容,基本上它是一个能够用JavaScript操作的位图(bitmap)。Canvas 目标表明一个 HTML 画布元素 -。它没有自己的行为,但是界说了一个 API 支撑脚本化客户端绘图操作。

大白话就是canvas是一个能够在上面经过javaScript画图的标签,经过其供给的context(上下文)及Api进行制作,在这个过程中canvas充任画布的角色。


怎么运用
canvas给咱们供给了许多的Api,供咱们运用,咱们只需求在body标签中创立一个canvas标签,在script标签中拿到canvas这个标签的节点,并创立context(上下文)就能够运用了。

... 步入正题。

完成电子签名
知道几许的朋友都很清楚,线有点绘成,面由线绘成。

多点成线,多线成面。

所以咱们实践只需求拿到当时接触的坐标点,进行成线处理就能够了。

在body中增加canvas标签
在这儿咱们不仅需求在在body中增加canvas标签,咱们还需求增加两个按钮,分别是撤销和保存(后面咱们会用到)。

撤销 保存
增加文件 我这儿全程运用js进行款式设置及增加。

// 装备内容
const config = {
width: 400, // 宽度
height: 200, // 高度
lineWidth: 5, // 线宽
strokeStyle: ‘red’, // 线条色彩
lineCap: ‘round’, // 设置线条两头圆角
lineJoin: ‘round’, // 线条交汇处圆角
}
获取canvas实例
这儿咱们运用querySelector获取canvas的dom实例,并设置款式和创立上下文。

// 获取canvas 实例
const canvas = document.querySelector('canvas')
// 设置宽高
canvas.width = config.width
canvas.height = config.height
// 设置一个边框,方便咱们检查及运用
canvas.style.border = '1px solid #000'
// 创立上下文
const ctx = canvas.getContext('2d')

基础设置
咱们将canvas的填充色为透明,并制作填充一个矩形,作为咱们的画布,假如不设置这个填充背景色,在咱们初识渲染的时候是一个黑色背景,这也是它的一个默认色。

// 设置填充背景色
ctx.fillStyle = 'transparent'
// 制作填充矩形
ctx.fillRect(
    0, // x 轴开端制作方位
    0, // y 轴开端制作方位
    config.width, // 宽度
    config.height // 高度
);

前次制作途径保存
这儿咱们需求声明一个目标,用来记录咱们上一次制作的途径完毕坐标点及偏移量。

保存前次坐标点这个我不用说咱们都懂;
为啥需求保存偏移量呢,由于鼠标和画布上的间隔是存在必定的偏移间隔,在咱们制作的过程中需求减去这个偏移量,才是咱们实践的制作坐标。
但我发现chrome中不需求减去这个偏移量,拿到的就是实践的坐标,之前在微信小程序中运用就需求减去偏移量,需求在小程序中运用的朋友需求注意这一点哦。
// 保存前次制作的 坐标及偏移量
const client = {
offsetX: 0, // 偏移量
offsetY: 0,
endX: 0, // 坐标
endY: 0
}
设备兼容
咱们需求它不仅能够在web端运用,还需求在移动端运用,咱们需求给它做设备兼容处理。咱们经过调用navigator.userAgent获取当时设备信息,进行正则匹配判别。

// 判别是否为移动端
const mobileStatus = (/Mobile|Android|iPhone/i.test(navigator.userAgent))

初始化
这儿咱们在监听鼠标按下(mousedown)(web端)/接触开端(touchstart)的时候进行初始化,事情监听采用addEventListener。

// 创立鼠标/手势按下监听器
window.addEventListener(mobileStatus ? "touchstart" : "mousedown", init)

三元判别阐明: 这儿当mobileStatus为true时则表明为移动端,反之则为web端,后续运用到的三元依旧是这个意思。

声明初始化办法

咱们增加一个init办法作为监听鼠标按下/接触开端的回调办法。

这儿咱们需求获取到当时鼠标按下/接触开端的偏移量和坐标,进行开端点制作。

Tips:web端能够直接经过event中取到,而移动端则需求在event.changedTouches[0]中取到。

这儿咱们在初始化后再监听鼠标的移动。

// 初始化
const init = event => {
    // 获取偏移量及坐标
    const { offsetX, offsetY, pageX, pageY } = mobileStatus ? event.changedTouches[0] : event 
    // 修正前次的偏移量及坐标
    client.offsetX = offsetX
    client.offsetY = offsetY
    client.endX = pageX
    client.endY = pageY
    // 铲除以上一次 beginPath 之后的一切途径,进行制作
    ctx.beginPath()
    // 依据装备文件设置进行相应装备
    ctx.lineWidth = config.lineWidth
    ctx.strokeStyle = config.strokeStyle
    ctx.lineCap = config.lineCap
    ctx.lineJoin = config.lineJoin
    // 设置画线开端点位
    ctx.moveTo(client.endX, client.endY)
    // 监听 鼠标移动或手势移动
    window.addEventListener(mobileStatus ? "touchmove" : "mousemove", draw)
}

制作
这儿咱们增加制作draw办法,作为监听鼠标移动/接触移动的回调办法。

// 制作
const draw = event => {
    // 获取当时坐标点位
    const { pageX, pageY } = mobileStatus ? event.changedTouches[0] : event
    // 修正最终一次制作的坐标点
    client.endX = pageX
    client.endY = pageY
    // 依据坐标点位移动增加线条
    ctx.lineTo(pageX , pageY )
    // 制作
    ctx.stroke()
}

完毕制作
增加了监听鼠标移动/接触移动咱们必定要记住撤销监听并完毕制作,不然的话它会一直监听并制作的。

这儿咱们创立一个cloaseDraw办法作为鼠标弹起/完毕接触的回调办法来完毕制作并移除鼠标移动/接触移动的监听。

canvas完毕制作则需求调用closePath()让其完毕制作

// 完毕制作
const cloaseDraw = () => {
    // 完毕制作
    ctx.closePath()
    // 移除鼠标移动或手势移动监听器
    window.removeEventListener("mousemove", draw)
}

增加完毕回调监听器

// 创立鼠标/手势 弹起/离开 监听器
window.addEventListener(mobileStatus ? "touchend" :"mouseup", cloaseDraw)

ok,现在咱们的电子签名功能还差一丢丢能够完成完了,现在现已能够正常的签名了。

咱们来看一下作用:

撤销功能/清空画布
咱们在刚开端创立的那两个按钮开端排上用场了。

这儿咱们创立一个cancel的办法作为撤销并清空画布运用

// 撤销-清空画布
const cancel = () => {
    // 清空当时画布上的一切制作内容
    ctx.clearRect(0, 0, config.width, config.height)
}

然后咱们将这个办法和撤销按钮进行绑定

 <button onclick="cancel()">撤销</button>

保存功能
这儿咱们创立一个save的办法作为保存画布上的内容运用。

将画布上的内容保存为图片/文件的办法有许多,比较常见的是blob和toDataURL这两种方案,但toDataURL这哥们没blob强,适配也不咋滴。所以咱们这儿采用a标签 ➕ blob方案完成图片的保存下载。

// 保存-将画布内容保存为图片
const save = () => {
    // 将canvas上的内容转成blob流
    canvas.toBlob(blob => {
        // 获取当时时间并转成字符串,用来作为文件名
        const date = Date.now().toString()
        // 创立一个 a 标签
        const a = document.createElement('a')
        // 设置 a 标签的下载文件名
        a.download = `${date}.png`
        // 设置 a 标签的跳转途径为 文件流地址
        a.href = URL.createObjectURL(blob)
        // 手动触发 a 标签的点击事情
        a.click()
        // 移除 a 标签
        a.remove()
    })
}

然后咱们将这个办法和保存按钮进行绑定

<button onclick="save()">保存</button>

咱们将刚刚制作的内容进行保存,点击保存按钮,就会进行下载保存

前端完成电子签名(web、移动端)通用
完整代码

Document
撤销 保存
各内核和浏览器支撑情况 Mozilla 程序从 Gecko 1.8 (Firefox 1.5(en-US)) 开端支撑。它首先是由 Apple 引进的,用于 OS X Dashboard 和 Safari。Internet Explorer 从 IE9 开端支撑,更旧版本的 IE 中,页面能够经过引进 Google 的Explorer Canvas项目中的脚本来获得支撑。Google Chrome 和 Opera 9+ 也支撑。

小程序中提示
在小程序中咱们假如需呀完成的话,也是同样的原理哦,只是咱们需求将创立实例和上下文的Api进行修正,由于小程序中是没有dom,既然没有dom,哪来的操作dom这个操作呢。

假如是uni-app则需求运用uni.createCanvasContext进行上下文创立

假如是原生微信小程序则运用wx.createCanvasContext进行创立(2.9.0)之后的库不支撑文章来源地址https://www.toymoban.com/news/detail-569750.html

到了这里,关于前端实现电子签名(web、移动端)通用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端Web API接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。 在前面

    2024年02月04日
    浏览(48)
  • uniapp写微信小程序实现电子签名

    写电子签名一定要注意的是一切全部按照手机上的适配来,为啥这么说呢,因为你在微信开发者工具中调试的时候认为是好的,正常的非常nice,当你发布版本的时候你会发现问题出来了。我下边的写法你可以直接用很简单。就是要记住canvas的几个属性和用法。 直接上干货 1.签

    2024年01月18日
    浏览(49)
  • 前端移动高级web详细解析五

    响应式布局方案 媒体查询 Bootstrap框架 基本写法 max-width:最大宽度(小于等于) min-width:最小宽度(大于等于) 书写顺序 min-width(从小到大) max-width(从大到小) 案例-左侧隐藏 需求:网页宽度小于等于768px则隐藏左侧区域 HTML 结构 CSS 样式 媒体查询-完整写法 / 逻

    2024年02月06日
    浏览(43)
  • uniapp - 实现微信小程序电子签名板,横屏手写姓名签名专用写字画板(详细运行示例,一键复制开箱即用)

    实现了在uniapp项目中,微信小程序平台流畅的写字签名板(也可以绘图)功能源码,复制粘贴,改改样式几分钟即可搞定! 支持自动横屏、持预览,真机运行测试非常流畅不卡顿。 如下代码所示。

    2024年02月16日
    浏览(192)
  • uni-app 微信小程序中如何通过 canvas 画布实现电子签名?

    一、实际应用场景 电子签名软件应用场景:电子签名在金融、银行、贷款行业中可以用于对内日常办公流转的文档的盖章签字,对外涉及业务合作协议,采购合同,贷款申请、信用评估、贷款合同、贷款文件表、说明函等等。 可以说,只要是涉及纸质文档签字盖章的场景,

    2024年02月10日
    浏览(57)
  • JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存

    1.HTML模板 2.获取DOM元素和定义变量 3.创建两个canvas元素,并设置它们的宽度和高度 4.绑定触摸事件:touchstart, touchmove, touchend和click 5.实现触摸事件回调函数:startDrawing, draw和stopDrawing 6.实现绘制线段的函数:drawLine 7.实现清除签名的函数:clearSignature 8.实现保存签名的函数:

    2024年01月16日
    浏览(50)
  • vue使用smooth-signature实现移动端电子签字,包括横竖屏

    1.使用smooth-signature 二.页面引入插件 三.实现效果 四.完整代码 五.参考 https://github.com/linjc/smooth-signature

    2024年02月07日
    浏览(39)
  • HTML5+CSS3+移动web 前端开发入门笔记(二)HTML标签详解

    排版标签用于对网页内容进行布局和样式的调整。下面是对常见排版标签的详细介绍: 标题使用至标签进行定义。定义最大的标题,定义最小的标题。具有align属性,属性值可以是:left、center、right。 将给定的HTML代码转换为Markdown格式的标题标签如下所示: 效果演示: H3:

    2024年02月07日
    浏览(69)
  • 电子签和电子签名法解读

    随着互联网和信息技术的快速发展,越来越多的业务和合同签订过程逐渐转向线上。在这一过程中,电子签和电子签名法成为了人们关注的焦点。本文将对电子签和电子签名法进行解读,探讨它们在现实生活中的应用和意义。 一、电子签和电子签名法的背景和意义 电子签和

    2024年02月10日
    浏览(47)
  • 前端和Java验签以太坊钱包签名实现中心化登录

    相信做过一些dapp项目的小伙伴都知道,当dapp需要和中心化的业务系统交互时,怎么验证登录成了一个问题。要dapp输入登录账户密码就很奇怪,违背了设计初衷,不登录吧,中心化系统又没有安全可言。 故此需要一个特定的动作。只有当钱包持有人授权登录(连接钱包),前

    2024年04月23日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包