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

vue3-signature实现电子签名

组件官方参考地址:https://github.com/WangShayne/vue3-signature/blob/HEAD/README.zh-CN.md

在数字化办公的当下,电子合同签署、公务在线办理、审批流程签字…… 手写签名的电子化需求随处可见。但如果从零开始用 Canvas 开发手写签名功能,既要处理鼠标 / 触摸事件,又要做兼容适配,费时又费力。

今天给大家安利一款 Vue3 专属的手写签名神器 ——vue3-signature组件,底层基于 Canvas 封装,核心功能一键调用,5 分钟就能集成到项目中,不用再写复杂的原生 Canvas 代码,新手也能轻松拿捏!

vue3-signature 到底是什么?

vue3-signature 是专门为 Vue3 生态打造的手写签名组件,完美适配 Vue3 的组合式 API 和语法,堪称 Vue3 项目实现电子签名的首选方案。

它的核心优势超亮眼:

  • 底层基于 Canvas 实现,支持鼠标、移动端触摸双端手写,无需额外做事件兼容;

  • 自带签名保存、清空、回退核心功能,还能自定义画笔颜色 / 粗细;

  • 体积轻量无冗余,API 设计简洁易懂,调用无门槛;

  • 直接封装好所有底层逻辑,开发者只需关注业务使用,不用重复造轮子。

安装

在你的 Vue3 项目根目录执行以下命令:

# Using npm npm install vue3-signature # Using yarn yarn add vue3-signature # Using pnpm pnpm add vue3-signature
全局注册
// main.js import { createApp } from "vue"; import Vue3Signature from "vue3-signature"; import App from "./App.vue"; createApp(App).use(Vue3Signature).mount("#app");
局部直接引入使用
import Vue3Signature from'vue3-signature'

vue3使用案例

<template> <div class="signature-container"> <!-- 签名画布核心组件 --> <Vue3Signature ref="signatureRef" :width="500" :height="300" pen-color="#000000" :pen-width="3" :disabled="false" class="signature-canvas" /> <!-- 操作按钮组 --> <div class="signature-btns"> <button class="signature-btnsbutton" @click="clearSignature">清空签名</button> <button class="signature-btnsbutton" @click="saveSignature">保存签名</button> <button class="signature-btnsbutton" @click="undoSignature">撤销一步</button> </div> </div> </template> <script setup lang="ts"> import { ref } from'vue' import Vue3Signature from'vue3-signature' // 获取组件实例,用于调用内置方法 const signatureRef:any = ref(null) // 清空整个签名画布 const clearSignature = () => { signatureRef.value.clear() } // 撤销上一步书写 const undoSignature = () => { signatureRef.value.undo() } // // 保存签名,支持Base64/Blob两种格式 const saveSignature = () => { try { // 官方标准方法:toDataURL(格式, 压缩率) const base64 = signatureRef.value?.toDataURL('image/png', 1.0); console.log('签名Base64:', base64); // 或使用save()别名(兼容旧版) // const base64 = signatureRef.value?.save('image/png', 1.0); } catch (error) { console.error('保存失败:', error); alert('签名保存失败,请检查组件状态'); } }; </script> <style scoped> .signature-container { width: 500px; margin: 20px auto; } .signature-canvas { border: 1px solid #e5e5e5; border-radius: 4px; } .signature-btns { margin-top: 15px; display: flex; gap: 10px; } .signature-btnsbutton { padding: 6px12px; background: #5b636b; color: #fff; border: none; border-radius: 4px; cursor: pointer; } .signature-btnsbutton:hover { background: #66b1ff; } </style>
解决开发中 3 个常见问题

基础功能实现后,实际开发中还会遇到移动端适配、空签名提交、跨域等问题,这几个优化方案帮你完美避坑!

响应式设计
<template> <div class="signature-container"> <Vue3Signature ref="signature" :w="'100%'" :h="'100%'" :clearOnResize="false" /> </div> </template> <script setup> import { ref } from "vue"; const signature = ref(null); </script> <style scoped> .signature-container { width: 100%; height: 400px; max-width: 800px; margin: 0 auto; border: 2px solid #e0e0e0; border-radius: 8px; overflow: hidden; } @media (max-width: 768px) { .signature-container { height: 300px; } } </style>
签名校验:避免空签名提交
// 校验是否完成签名 const checkSignature = () => { if (signatureRef.value.isEmpty()) { alert('请完成手写签名!') returnfalse } returntrue } // 保存签名前先执行校验 const saveSignature = () => { if (!checkSignature()) return // 后续保存逻辑... }
跨域问题:插入背景图必看

如果需要在签名画布中插入合同模板、表单背景图,必须保证图片资源支持跨域,否则会导致getDataUrl/getBlob方法报错。✅ 解决办法:要求后端配置跨域响应头,或直接使用项目同域的图片资源。

http://www.jsqmd.com/news/486973/

相关文章:

  • 【GUI-Agent】阶跃星辰 GUI-MCP 解读---(1)---论文
  • Agentic AI时代程序员必备算法思想详解(附实战案例)
  • MySQL数据库—索引
  • AstrBot+NapCat 打造随时随地可用的 QQ 智能机器人(1)
  • MCP工具粒度的权衡 - yi
  • 解决大模型微调的灾难性遗忘:Nova Forge 数据混合策略工程实践
  • Claude Code 费用与中转api
  • C语言指针概念详解:数组指针与二级指针的本质区别
  • 2026年高端制造视角下的气密性测试仪供应商甄选与竞争力解析 - 深度智识库
  • P8627 [蓝桥杯 2015 省 A] 饮料换购【模拟+数学】
  • 第一个Java文件!Hello,world! - Kight
  • 银河麒麟桌面操作系统 V11 来袭!硬核架构 + 全维安全
  • kubernetes知识点汇总13-18
  • 2026年气密性测试仪选购指南:趋势解析与五大优质厂商深度评测 - 深度智识库
  • 无需服务器!Windows 部署 OpenClaw,打造私人 AI助手
  • 2026年气密性检测设备厂家实力推荐高端制造质检解决方案优选指南 - 深度智识库
  • 论文排版之添加图片、表格、公式的题注
  • 文化课期间复建 OI 记录
  • 第1章 线性代数的本源:线性、结构与系统思维
  • 基于 libhv 实现多路径 WebSocket 服务器:设计与实战
  • 最近在搞AUTOSAR项目,发现生成RTE和配置协议栈这两个环节真能让人头秃。今天就带大家手搓点实战经验,顺便聊聊那些藏在XML背后的骚操作
  • 2026春季下学期第三周
  • 入门必懂:AI Agent核心概念拆解——从“是什么”到“能做什么”(2026智能体开发系列·第2篇)
  • 利用qwen 3.5-9b模型识别几何图像并转换成latex tikz代码
  • 从零配置Synplify Premier工程:手把手教你玩转FDC约束文件与安全设计(2025新版)
  • [翻译] AWS Lambda 中的按需容器加载
  • AIA | 西工大马启悦,高传强等:物理指导的激波抖振抑制翼型优化设计研究
  • 工控上位机新手避坑指南:6条血泪经验,全是现场实战总结
  • Cadence仿真MOS电容C-V曲线:从电路图到参数扫描的完整流程
  • 衡山派VE驱动测试指南:基于MPP模块的集成测试方法