更新记录

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) 暂不支持
其他小程序 ⚠️ 未充分测试

安装

  1. uni 插件市场 导入本插件,或复制 uni_modules/nny-signature 到项目
  2. 使用 HBuilderX 3.5.0+,Vue 3 项目
  3. 导入时若提示合并 pages_init.json,请确认注册签名页面路由
  4. 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: 组件已内置舞台旋转坐标映射,请勿额外旋转页面根节点。

更新日志

changelog.md

隐私、权限声明

1. 本插件需要申请的系统权限列表:

App 端在横竖屏签名时可能调用屏幕方向锁定能力,不申请额外系统权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT License

Copyright (c) 2026 nny-signature

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

暂无用户评论。