当前位置: 首页 > news >正文

Vue 实现电子签名并生成签名图片

目录

  1. 前言
  2. 项目结构
  3. 代码实现
    • 安装依赖
    • 创建签名画布组件
    • 生成签名图片
  4. 总结
  5. 相关阅读
    在这里插入图片描述

1. 前言

电子签名在现代Web应用中越来越普遍,例如合同签署、确认表单等。本文将介绍如何使用Vue.js实现一个简单的电子签名功能,并将签名生成图片。

2. 项目结构

项目结构如下:

my-vue-signature/
├── public/
│   └── index.html
├── src/
│   ├── components/
│   │   └── SignaturePad.vue
│   ├── App.vue
│   ├── main.js
├── package.json
└── README.md

3. 代码实现

3.1 安装依赖

我们将使用一个轻量级的签名画布库 signature_pad,通过npm安装:
如果想学习signature_pad点击链接 - signature_pad 库详解

npm install signature_pad

3.2 创建签名画布组件

src/components 文件夹下创建 SignaturePad.vue 文件:

<template><div><canvas ref="signatureCanvas" @mousedown="startDrawing" @mousemove="draw" @mouseup="endDrawing" @mouseleave="endDrawing"></canvas><button @click="clearCanvas">清除</button><button @click="saveSignature">保存签名</button></div></template><script>import SignaturePad from 'signature_pad';export default {name: 'SignaturePad',data() {return {signaturePad: null,isDrawing: false,};},mounted() {const canvas = this.$refs.signatureCanvas;canvas.width = 600;canvas.height = 300;this.signaturePad = new SignaturePad(canvas);},methods: {startDrawing() {this.isDrawing = true;this.signaturePad.beginPath();},draw(event) {if (!this.isDrawing) return;const rect = this.$refs.signatureCanvas.getBoundingClientRect();this.signaturePad.lineTo(event.clientX - rect.left, event.clientY - rect.top);this.signaturePad.stroke();},endDrawing() {this.isDrawing = false;this.signaturePad.closePath();},clearCanvas() {this.signaturePad.clear();this.$emit('clean')},saveSignature() {if (this.signaturePad.isEmpty()) {alert('请先签名!');return;}const dataURL = this.signaturePad.toDataURL();this.$emit('save-signature', dataURL);},},};</script><style scoped>canvas {border: 1px solid #ccc;display: block;margin-bottom: 10px;}button {margin-right: 10px;}</style>

3.3 在 App.vue 中使用组件并生成签名图片

<template><div id="app"><div class="center"><h1>电子签名</h1><SignaturePad @save-signature="handleSaveSignature" @clean="handleClean" /><div ><h2>签名图片:</h2><div class="showimg"><img v-if="signatureImage" :src="signatureImage"  alt="Signature" /></div></div></div></div>
</template><script>
import SignaturePad from './components/SignaturePad.vue';export default {name: 'App',components: {SignaturePad,},data() {return {signatureImage: null,};},methods: {handleSaveSignature(dataURL) {this.signatureImage = dataURL;},handleClean(){this.signatureImage = null}},
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;margin-top: 60px;display: flex;justify-content: center;align-items: center;flex-direction: column
}
.center{}
.showimg{border-radius: 4px;border: 1px solid #ccc;padding: 10px;box-sizing: border-box;width: 610px;height: 310px;
}
</style>

4. 总结

通过本文,你学习了如何使用Vue.js和 signature_pad 库实现一个简单的电子签名功能,并生成签名图片。通过这种方式,可以轻松地在Web应用中集成电子签名功能,提高用户体验。

5. 相关阅读

  • Signature Pad 文档
  • Vue.js 官方文档

希望本文能帮助你实现电子签名功能。如果有任何问题或建议,请随时联系。祝你开发顺利!

相关文章:

Vue 实现电子签名并生成签名图片

目录 前言项目结构代码实现 安装依赖创建签名画布组件生成签名图片 总结相关阅读 1. 前言 电子签名在现代Web应用中越来越普遍&#xff0c;例如合同签署、确认表单等。本文将介绍如何使用Vue.js实现一个简单的电子签名功能&#xff0c;并将签名生成图片。 2. 项目结构 项…...

Visual Studio 2022美化

说明&#xff1a; VS版本&#xff1a;Visual Studio Community 2022 背景美化 【扩展】【管理扩展】搜索“ClaudiaIDE”&#xff0c;【下载】&#xff0c;安装完扩展要重启VS 在wallhaven下载壁纸图片作为文本编辑器区域背景图片 【工具】【选项】搜索ClaudiaIDE&#xff…...

[CISCN2019 华东南赛区]Web11

进来先做信息收集&#xff0c;右上角显示当前ip&#xff0c;然后有api的调用地址和请求包的格式以及最重要的是最下面的smarty模版&#xff0c;一看到这个就得想到smarty模版注入 测试了一下两个api都无法访问 直接切到数据包看看能不能通过XFF来修改右上角ip 成功修改&#x…...

【图形图像-1】SDF

在图形图像处理中&#xff0c;SDF&#xff08;Signed Distance Field&#xff0c;带符号的距离场&#xff09;是一种表示图形轮廓和空间距离的数学结构。它通常用于计算机图形学、文本渲染、碰撞检测和物理模拟等领域。 SDF&#xff08;Signed Distance Field&#xff0c;带符号…...

苍穹外卖01

0. 配置maven (仅一次的操作 1.项目导入idea 2. 保证nginx服务器运行 &#xff08;nginx.exe要在非中文的目录下&#xff09; 开启服务&#xff1a; start nginx 查看任务进程是否存在&#xff1a; tasklist /fi "imagename eq nginx.exe" 关闭ngi…...

ElasticSearch(三)—文档字段参数设置以及元字段

一、 字段参数设置 analyzer&#xff1a; 指定分词器。elasticsearch 是一款支持全文检索的分布式存储系统&#xff0c;对于 text类型的字段&#xff0c;首先会使用分词器进行分词&#xff0c;然后将分词后的词根一个一个存储在倒排索引中&#xff0c;后续查询主要是针对词根…...

ARM功耗管理之压力测试和PM_DEBUG实验

安全之安全(security)博客目录导读 ARM功耗管理精讲与实战汇总参见&#xff1a;Arm功耗管理精讲与实战 思考&#xff1a;睡眠唤醒实验&#xff1f;压力测试&#xff1f;Suspend-to-Idle/RAM/Disk演示&#xff1f; 1、实验环境准备 2、软件代码准备 3、唤醒源 4、Suspend-…...

ESP8266用AT指令实现连接MQTT

1准备工作 硬件&#xff08;ESP8266&#xff09;连接电脑 硬件已经烧入了MQTT透传固件 2实现连接 2-1&#xff08;进入AT模式&#xff09; 打开串口助手发送如下指令 AT 2-2&#xff08;复位&#xff09; ATRST 2-3&#xff08;开启DHCP&#xff0c;自动获取IP&#x…...

人工智能与机器学习原理精解【5】

文章目录 最优化基础理论特征值&#xff08;Eigenvalue&#xff09;特征向量&#xff08;Eigenvector&#xff09;特征值和特征向量的重要性计算方法特征值一、特征值分解的定义二、特征值分解的算法三、特征值分解的例子 正定矩阵Hessian矩阵的特征值Hessian矩阵的含义Hessian…...

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统&#xff0c;旨在最大化一个组织的适应性。关于适应性&#xff08;或者敏捷性&#xff0c;也就是敏捷开发的初衷&#xff09;我们是指优化&#xff1a; 以相对低的成本改变方向的能力&#xff0c;主要是基于通过频繁交付产生的探索。从…...

力扣高频SQL 50题(基础版)第七题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第七题1068. 产品销售分析 I题目说明思路分析实现过程准备数据&#xff1a;实现方式&#xff1a;结果截图:总结&#xff1a; 力扣高频SQL 50题&#xff08;基础版&#xff09;第七题 1068. 产品销售分析 I 题目说明 …...

【音视频】一篇文章区分直播与点播、推流与拉流

文章目录 前言直播和点播的概念及区别直播是什么点播是什么 直播和点播的区别举例说明推流与拉流推流是什么拉流是什么 推流与拉流的区别举例说明 总结 前言 在音视频领域&#xff0c;直播、点播、推流和拉流是常见的概念&#xff0c;每个术语都有其特定的含义和应用场景。了解…...

3d动画软件blender如何汉化?(最新版本4.2)

前言 Blender是一个非常强大的3d动画软件&#xff0c;总能受到大量工作者的青睐。 但是&#xff0c;对于新手来说&#xff08;尤其是英语学渣&#xff09;&#xff0c;语言是个难事。大部分blender打开时都是英文&#xff0c;对新手使用具有一定的障碍。因此&#xff0c;我们需…...

C++学习笔记04-补充知识点(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文对读者可以用作自查&#xff0c;答案在后面&#xff0…...

Vue el-table的自定义排序返回值为null,设置刷新页面保持排序标志,导航时elementui组件不更新

自定义排序使用sort-change"sortChange"监听&#xff0c;表列需设置为sortable“custom”&#xff08;自定义&#xff09; <el-table:data"tableData"bordersort-change"sortChange":default-sort"{prop:sortProp,order:sortOrder}&quo…...

一起笨笨的学C ——16链表基础

目录 目录 前言 正文 链表定义&#xff1a; 基本创建链表程序&#xff1a; 链表结点插入&#xff1a; 对角线记忆法&#xff1a; 画图理解法&#xff1a; 链表结点删除&#xff1a; 链表销毁&#xff1a; 后语 前言 链表理解方法分享&#xff0c;愿你的大脑也能建立一个…...

信息学奥赛一本通1917:【01NOIP普及组】装箱问题

1917&#xff1a;【01NOIP普及组】装箱问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4178 通过数: 2473 【题目描述】 有一个箱子容量为VV(正整数&#xff0c;0≤V≤200000≤V≤20000&#xff09;&#xff0c;同时有n个物品&#xff08;0≤n≤300≤n≤30),…...

android user 版本如何手动触发dump

项目需要在android user版本增加手动触发dump方法&#xff0c;用以确认user版本发生dump后系统是重启还是真正发生dump卡机&#xff01; 本文以qcom平台项目为例描述所做的修改&#xff0c;留下足迹以备后忘。 闲言少叙&#xff0c;开整上干货&#xff1a; 一、修改bin文件 …...

RedHat Linux 7.5 安装 mssql-server

RedHat Linux 7.5 安装 mssql-server 1、安装部署所需的依赖包 [rootlocalhost ~]# yum -y install libatomic bzip2 gdb cyrus-sasl cyrus-sasl-gssapi Loaded plugins: ulninfo Resolving Dependencies --> Running transaction check ---> Package bzip2.x86_64 0:1…...

Vue的SSR和预渲染:提升首屏加载速度与SEO效果

引言 在现代Web应用开发中,首屏加载速度和搜索引擎优化(SEO)是衡量应用性能的重要指标。Vue.js 作为流行的前端框架,提供了服务器端渲染(SSR)和预渲染(prerendering)两种技术来提升这些指标。本文将深入探讨如何使用 Vue 的 SSR 和预渲染技术,提供详细的代码示例和最…...

变压器绕组类型 | 高频变压器绕制要点

注&#xff1a;本文为 “变压器绕制” 相关合辑。 英文引文&#xff0c;机翻未校。 如有内容异常&#xff0c;请看原文。 图片清晰度受引文原图所限。 变压器绕组类型&#xff1a;圆筒式、螺旋式、交叉式与饼式绕组 Types of Transformer Windings: Cylindrical, Helical, Cro…...

解锁Ghidra:面向逆向工程师的二进制分析工具指南

解锁Ghidra&#xff1a;面向逆向工程师的二进制分析工具指南 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer 剖析Ghidra核心…...

实战驱动:告诉快马你的vue项目类型,获取量身定制的环境与示例

最近在做一个Vue 3移动端H5项目时&#xff0c;发现环境配置和基础搭建特别耗时。经过几次实践&#xff0c;我总结出了一套高效的项目初始化方法&#xff0c;今天就来分享这个实战经验。 项目初始化与移动端适配 使用Vue CLI创建项目后&#xff0c;首先要解决的就是移动端适配问…...

Multisim仿真-FSK调制系统设计与性能优化

1. FSK调制系统基础与Multisim入门 FSK&#xff08;频移键控&#xff09;是数字通信中最基础的调制方式之一&#xff0c;它通过不同频率的载波来表示二进制数据。在实际工程中&#xff0c;Multisim作为电子电路仿真利器&#xff0c;能帮我们快速验证设计思路。我刚开始接触通信…...

在单细胞测序数据分析中,barcodes、features和matrix是三个最核心的基础文件,它们共同构成了所有分析的基石。

在GEO&#xff08;Gene Expression Omnibus&#xff09;数据库中下载单细胞数据时&#xff0c;最常见的数据存储和提供形式主要有以下四种类型&#xff1a;10x Genomics 标准格式&#xff08;最主流&#xff09;在GEO的数据集中&#xff0c;我们通常会找到一个包含以下三个核心…...

机器视觉C# 调用相机:从 USB 摄像头到海康工业相机(WinForms WPF)

&#x1f3a5; 机器视觉C# 调用相机&#xff1a;从 USB 摄像头到海康工业相机&#xff08;WinForms & WPF&#xff09; &#x1f4dd; 前言 在工业自动化、医疗影像或简单软件开发中&#xff0c;调用摄像头是一个绕不开的话题。在项目中同时遇到了两种需求&#xff1a; …...

OpenClaw多模态实践:Qwen3-VL:30B图片识别+飞书对话

OpenClaw多模态实践&#xff1a;Qwen3-VL:30B图片识别飞书对话 1. 为什么需要多模态AI助手&#xff1f; 上周我整理团队活动照片时遇到一个典型场景&#xff1a;需要从200多张合影中筛选出包含特定成员的图片&#xff0c;并生成对应的活动纪要。手动操作不仅耗时&#xff0c;…...

雷达点云与相机标定避坑指南:如何用MATLAB Lidar Camera Calibrator提高标定精度

MATLAB Lidar Camera Calibrator实战&#xff1a;高精度标定的7个关键步骤与避坑策略 当激光雷达与相机数据需要融合时&#xff0c;标定精度直接决定了后续感知算法的上限。许多工程师在首次使用MATLAB Lidar Camera Calibrator时&#xff0c;常因自动标定结果不理想而陷入困惑…...

C++/Qt 使用 Tushare 获取股票信息

探索数据之源&#xff1a;使用tushare为Qt/C学习项目获取股票数据在进行金融量化分析或学习金融市场行为时&#xff0c;获取高质量、结构化的股票数据是至关重要的第一步。作为一个计划将Qt/C用于金融数据可视化或策略模拟的学习者&#xff0c;我近期深入体验了使用Python库tus…...

73.基于matlab的weber能量法求解齿轮时变啮合刚度的能够跑出刚度图,通过求解轮齿部分...

73.基于matlab的weber能量法求解齿轮时变啮合刚度的能够跑出刚度图&#xff0c;通过求解轮齿部分变形、基体变形及局部接触变形这三部分的变形&#xff0c;进而求得综合弹性变形&#xff0c;最终求出时变啮合刚度 程序已调通&#xff0c;可直接运行齿轮传动系统的时变啮合刚度计…...