vue-sign-canvas 作为 Vue 生态中的签名组件,从最初仅支持基础绘制功能,到如今全面升级为专业级解决方案。本文将详细介绍该组件如何通过架构重构和技术升级,解决移动端触点偏移、签名状态判断等核心痛点。
为什么要做一次不兼容升级
签名组件在实际业务中常面临多项复杂需求:
表单提交前需准确判断用户是否完成签名
支持已有签名回显并继续补充签名
确保移动端和PC端触点位置精准
高清屏幕下保持导出图片清晰度
提供撤销重做等误操作补救机制
支持合同模板等背景图合成场景
解决JPEG导出透明区域异常问题
完善TypeScript类型支持
这些需求促使组件必须进行架构层面的重构,而非简单适配Vue 3。
技术栈升级
新版采用现代化技术方案:
基于Vue 3的Composition API
TypeScript实现类型安全
Vite构建工具提升开发效率
Pointer Events统一输入处理
支持ESM/UMD双模式输出
提供完整的类型声明文件
Vue 2项目如需使用需安装旧版本:
npm i sign-canvas@1
组件结构调整
重构后的组件架构更清晰:
constants.ts统一管理配置项和类型
useSignCanvas.ts处理组件核心状态
utils/canvas.ts封装绘制相关功能
index.vue仅保留模板和事件绑定
输入事件:统一 PC 和移动端
通过Pointer Events标准化输入处理,结合DPR适配确保不同设备触点位置精准。
空签名判断
严格区分用户笔迹和辅助图层:
用户绘制内容计入签名状态
回显签名同样视为有效签名
背景等辅助元素不计入判断
判断方法示例:
if (signCanvasRef.value?.isEmpty()) {
return;
}
回显后继续编辑
新增fromDataURL()方法支持签名回显:
await signCanvasRef.value?.fromDataURL(base64);
撤销和重做
优化历史记录策略:
signCanvasRef.value?.undo();
signCanvasRef.value?.redo();
背景图合成
支持合同模板等场景:
const options = {
backgroundImage: contractBase64,
backgroundImageFit: 'cover',
backgroundImageOpacity: 1
};
描写和临摹
新增临摹引导功能:
const options = {
guideEnabled: true,
guideText: '张三',
guideFont: '700 96px serif',
guideTextColor: '#101010',
guideTextOpacity: 0.16
};
导出旋转
支持多角度导出:
const options = {
exportRotate: 90
};
JPEG 白底导出
解决透明区域异常:
const options = {
imgType: 'jpeg',
jpegBgColor: '#fff'
};
Demo 工作台
新版demo提供完整调试功能:
多设备预览支持
画布参数实时调节
笔迹效果调试
背景图配置
导出设置
迁移建议
升级注意事项:
Vue 2项目需先升级框架
推荐使用Vue 3标准用法
兼容旧版方法名但建议迁移
小程序环境需特殊适配
本次升级使vue-sign-canvas从基础功能组件蜕变为专业级解决方案,不仅解决了一系列业务痛点,更为未来功能扩展奠定了坚实基础。组件将继续完善笔迹持久化和多端适配能力,为用户提供更专业的签名体验。