更新记录
1.0.0(2026-01-05)
下载此版本
新增
- 初始版本发布
- 基础手写签名功能
- 支持 H5、微信/支付宝/百度/字节跳动/QQ 小程序、App 多端
- 支持 Vue2 和 Vue3 双版本
- 压感模式,模拟真实笔锋效果
- 撤销/重做功能,支持配置历史记录长度
- 丰富的配置项:画笔颜色、粗细、背景色等
- 支持导出 PNG/JPG 图片
- 支持自定义背景色和背景图片
- 支持横屏签名模式
- 支持占位提示文字
- 支持工具栏位置配置(顶部/底部)
- 支持自定义样式
- 完整的事件回调
- 支持通过 ref 调用组件方法
平台兼容性
uni-app(3.6.15)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
- |
- |
w-signature 手写签名板
一个功能丰富的 UniApp 手写签名板组件,支持多端、Vue2/Vue3 兼容。
特性
- 多端兼容:H5、微信/支付宝/百度/字节跳动/QQ 小程序、App
- Vue2/Vue3 双版本支持
- 压感模式,模拟真实笔锋效果
- 撤销/重做功能
- 丰富的配置项
- 支持导出图片
- 支持自定义背景色/背景图
- 支持横屏签名模式
安装
将插件导入到 uni_modules 目录下即可自动注册组件。
基本用法
<template>
<w-signature
ref="signatureRef"
:height="300"
@save="onSave"
/>
</template>
<script>
export default {
methods: {
onSave(result) {
console.log('签名图片路径:', result.tempFilePath)
}
}
}
</script>
Props 属性
| 属性名 |
类型 |
默认值 |
说明 |
| canvasId |
String |
随机生成 |
画布ID |
| width |
String/Number |
'100%' |
画布宽度 |
| height |
String/Number |
300 |
画布高度 |
| penColor |
String |
'#000000' |
画笔颜色 |
| penWidth |
Number |
3 |
画笔宽度 |
| minWidth |
Number |
2 |
压感模式下画笔最小宽度 |
| maxWidth |
Number |
6 |
压感模式下画笔最大宽度 |
| backgroundColor |
String |
'#ffffff' |
背景颜色 |
| backgroundImage |
String |
'' |
背景图片URL |
| disabled |
Boolean |
false |
是否禁用 |
| disableScroll |
Boolean |
true |
是否禁止页面滚动 |
| showToolbar |
Boolean |
true |
是否显示工具栏 |
| showUndo |
Boolean |
true |
是否显示撤销按钮 |
| showRedo |
Boolean |
true |
是否显示重做按钮 |
| showClear |
Boolean |
true |
是否显示清除按钮 |
| showSave |
Boolean |
true |
是否显示保存按钮 |
| undoText |
String |
'撤销' |
撤销按钮文字 |
| redoText |
String |
'重做' |
重做按钮文字 |
| clearText |
String |
'清除' |
清除按钮文字 |
| saveText |
String |
'保存' |
保存按钮文字 |
| placeholder |
String |
'请在此处签名' |
占位提示文字 |
| showPlaceholder |
Boolean |
true |
是否显示占位提示 |
| exportType |
String |
'png' |
导出图片类型(png/jpg) |
| exportQuality |
Number |
1 |
导出图片质量(0-1) |
| pressure |
Boolean |
false |
是否开启压感模式 |
| landscape |
Boolean |
false |
是否支持横屏签名 |
| maxHistoryLength |
Number |
20 |
最大历史记录长度 |
| openSmooth |
Boolean |
true |
是否开启笔锋平滑 |
| smoothness |
Number |
0.6 |
笔锋平滑度(0-1) |
| toolbarPosition |
String |
'bottom' |
工具栏位置(top/bottom) |
| customStyle |
Object |
{} |
自定义样式对象 |
Events 事件
| 事件名 |
说明 |
回调参数 |
| start |
开始签名时触发 |
{ point, event } |
| signing |
签名过程中触发 |
{ point, event } |
| end |
结束签名时触发 |
{ event } |
| save |
保存签名时触发 |
{ tempFilePath, isEmpty } |
| clear |
清除签名时触发 |
- |
| undo |
撤销时触发 |
- |
| redo |
重做时触发 |
- |
| isEmpty |
签名板空状态变化时触发 |
isEmpty: Boolean |
Methods 方法
通过 ref 调用组件方法:
this.$refs.signatureRef.save()
| 方法名 |
说明 |
参数 |
返回值 |
| save() |
保存签名图片 |
- |
Promise<{tempFilePath, isEmpty}> |
| clear() |
清除签名 |
- |
- |
| undo() |
撤销上一步 |
- |
- |
| redo() |
重做 |
- |
- |
| isCanvasEmpty() |
判断签名板是否为空 |
- |
Boolean |
| getImageData() |
获取Base64格式图片数据 |
- |
Promise |
| setPenColor(color) |
设置画笔颜色 |
color: String |
- |
| setPenWidth(width) |
设置画笔宽度 |
width: Number |
- |
| openLandscape() |
打开横屏签名模式 |
- |
- |
使用示例
压感模式(笔锋效果)
<w-signature
:pressure="true"
:minWidth="1"
:maxWidth="8"
:openSmooth="true"
:smoothness="0.7"
/>
自定义工具栏
<w-signature
ref="signature"
:showToolbar="false"
/>
<button @click="$refs.signature.clear()">清除</button>
<button @click="$refs.signature.save()">保存</button>
获取 Base64 数据
const base64 = await this.$refs.signature.getImageData()
平台兼容性
| 功能 |
H5 |
微信小程序 |
App |
| 基础签名 |
✅ |
✅ |
✅ |
| 压感模式 |
✅ |
✅ |
✅ |
| 撤销/重做 |
✅ |
✅ |
✅ |
| 导出图片 |
✅ |
✅ |
✅ |
License
MIT