更新记录
1.0.0(2026-06-12) 下载此版本
- 首次发布
- 支持 H5 / 微信小程序 / App 全屏手写签名
- 支持横屏、竖屏两种签名模式
- 提供弹层调用
openSignature与页面调用openSignaturePage - 支持自定义笔触颜色、线宽、背景色
平台兼容性
uni-app(4.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
nny-signature 全屏手写签名组件
支持 H5、微信小程序、App(Vue) 的全屏手写签名组件。提供弹层与独立页面两种调用方式,支持横屏 / 竖屏签名、笔触自定义与 PNG 图片导出。
平台支持
| 平台 | 支持 | 说明 |
|---|---|---|
| H5 | ✅ | Canvas 2d + DOM 触摸 |
| 微信小程序 | ✅ | Canvas 2d,工具栏使用 cover-view |
| App(Vue) | ✅ | createCanvasContext 原生绘制 |
| App(nvue) | ❌ | 暂不支持 |
| 其他小程序 | ⚠️ | 未充分测试 |
安装
- 从 uni 插件市场 导入本插件,或复制
uni_modules/nny-signature到项目 - 使用 HBuilderX 3.5.0+,Vue 3 项目
- 导入时若提示合并
pages_init.json,请确认注册签名页面路由 - 在
pages.json中配置 easycom(若未自动识别):
{
"easycom": {
"autoscan": true,
"custom": {
"^nny-(.*)": "@/uni_modules/nny-signature/components/nny-$1/nny-$1.vue"
}
}
}
快速开始
方式一:弹层调用(推荐)
在 App.vue 或任意页面根节点挂载组件一次,然后通过 API 打开:
<template>
<view>
<button @click="handleSign">去签名</button>
<nny-signature />
</view>
</template>
<script setup>
import { openSignature } from '@/uni_modules/nny-signature/js_sdk/index.js'
async function handleSign() {
try {
const result = await openSignature({ orientation: 'landscape' })
console.log('签名图片', result.tempFilePath)
// H5 额外返回 result.base64
} catch (err) {
if (!err?.cancelled) console.error(err)
}
}
</script>
方式二:独立页面调用
import { openSignaturePage } from '@/uni_modules/nny-signature/js_sdk/index.js'
const result = await openSignaturePage({
orientation: 'portrait',
title: '请签名'
})
方式三:页面内嵌
<nny-signature
embed
:show="visible"
orientation="landscape"
title="手写签名"
pen-color="#1a1a1a"
:line-width="4"
background-color="#ffffff"
@confirm="onConfirm"
@cancel="onCancel"
/>
API
openSignature(options)
弹层模式打开签名,返回 Promise。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| orientation | 'landscape' \| 'portrait' |
'landscape' |
签名方向 |
| title | string |
'手写签名' |
标题文案 |
| penColor | string |
'#1a1a1a' |
笔触颜色 |
| lineWidth | number |
4 |
笔触粗细 |
| backgroundColor | string |
'#ffffff' |
画布背景色 |
返回值
{
tempFilePath: string // 图片路径;H5 为 base64 dataURL
base64?: string // 仅 H5
}
用户点击返回时 Promise 以 { cancelled: true } 拒绝。
openSignaturePage(options)
参数与 openSignature 相同,通过 uni.navigateTo 打开独立签名页。
组件 Props(embed 模式)
| Prop | 类型 | 默认值 | 说明 |
|---|---|---|---|
| embed | boolean |
false |
是否页面内嵌模式 |
| show | boolean |
false |
是否显示(embed 时) |
| title | string |
'' |
标题 |
| orientation | string |
'' |
横竖屏 |
| penColor | string |
'' |
笔触颜色 |
| lineWidth | number |
0 |
线宽 |
| backgroundColor | string |
'' |
背景色 |
组件事件
| 事件 | 参数 | 说明 |
|---|---|---|
| confirm | { tempFilePath, base64? } |
确认签名 |
| cancel | - | 取消签名 |
| update:show | boolean |
embed 模式下显示状态 |
pages.json 配置
若导入时未自动合并路由,请手动添加:
{
"pages": [
{
"path": "uni_modules/nny-signature/pages/signature/signature",
"style": {
"navigationBarTitleText": "手写签名",
"navigationStyle": "custom",
"pageOrientation": "auto",
"disableScroll": true
}
}
]
}
微信小程序说明
- 画布下方按钮使用
cover-view,可穿透原生 canvas 响应点击 - 横屏模式会调用
wx.setPageOrientation,关闭签名页后自动恢复竖屏
App 说明
- 使用
canvas-id+createCanvasContext绘制,兼容性更好 - 横竖屏切换会调用
plus.screen.lockOrientation
目录结构
uni_modules/nny-signature/
├── components/nny-signature/ # 签名组件
├── js_sdk/ # API 与画布引擎
├── pages/signature/ # 独立签名页
├── package.json
├── readme.md
├── changelog.md
├── license.md
└── pages_init.json
常见问题
Q: 一直显示「画布准备中」?
A: 多为画布未获取到有效尺寸,请确认签名页已全屏展示且未在隐藏容器中初始化。
Q: 小程序按钮点不了?
A: 请使用本插件内置 cover-view 工具栏,不要在 canvas 上叠普通 view。
Q: H5 横屏坐标偏移?
A: 组件已内置舞台旋转坐标映射,请勿额外旋转页面根节点。

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 6
赞赏 0
下载 12234334
赞赏 1918
赞赏
京公网安备:11010802035340号