Skip to content

Signature 签名

介绍

用于签名场景,基于 Canvas 实现。

基础用法

通过组件的 ref 获取实例,调用 getImage 方法获取签名图片。

  • web端时,获取图片是 base64 格式
  • 小程序端时,获取图片是 filePath 格式
html
<vd-signature ref="signatureRef" />
<vd-button type="primary" :action="handleSubmit">确认</vd-button>
ts
const signatureRef = shallowRef();

async function handleSubmit() {
  // 校验是否签名
  if (!signatureRef.value.validate()) {
    return; // 未签名
  }

  // 获取签名图片
  const image = await signatureRef.value.getImage();

  console.log('签名图片:', image);
}

画笔线条颜色

通过 line-color 属性配置画笔线条颜色。

html
<vd-signature ref="signatureRef" line-color="#000" />

画笔线条宽度

通过 line-width 属性配置画笔线条宽度。

html
<vd-signature ref="signatureRef" line-width="2" />

画布背景颜色

通过 background 属性配置画布背景颜色。

html
<vd-signature ref="signatureRef" background="#fff" />

贝塞尔曲线绘制

通过 bezier-curve 属性配置是否使用贝塞尔曲线绘制,默认开启。

html
<vd-signature ref="signatureRef" :bezier-curve="false" />

笔锋模式

通过 pressure 开启压感笔锋效果,书写速度越快线条越细。可传入 true,或对象配置 enableminWidthmaxWidthminSpeed。开启后优先于 bezier-curve

html
<vd-signature
  ref="signatureRef"
  :pressure="{ enable: true, minWidth: 2, maxWidth: 5, minSpeed: 1.5 }"
  :height="300"
/>

图片旋转角

通过 rotate 属性配置图片旋转角,也可以在获取图片时传参设置。

html
<vd-signature ref="signatureRef" rotate="90" />
ts
const signatureRef = shallowRef();

async function handleSubmit() {
  // 校验是否签名
  if (!signatureRef.value.validate()) {
    return; // 未签名
  }

  // 获取签名图片
  const image = await signatureRef.value.getImage({
    rotate: 90,
  });

  console.log('签名图片:', image);
}

缓存和加载已有签名数据

通过 getLinesloadLines 方法获取和加载已有签名数据。

html
<vd-signature ref="signatureRef" />
<vd-button type="primary" :action="handleLoad">加载</vd-button>
<vd-button type="primary" :action="handleSave">保存</vd-button>
ts
const signatureRef = shallowRef();

function handleLoad() {
  const lines = uni.getStorageSync('signature-lines');
  signatureRef.value.loadLines(lines);
  console.log('加载的签名数据:', lines);
}

function handleSave() {
  const lines = signatureRef.value.getLines();
  uni.setStorageSync('signature-lines', lines);
  console.log('保存的签名数据:', lines);
}

清除签名

通过 clear 方法清除签名。

html
<vd-signature ref="signatureRef" />
<vd-button type="primary" :action="handleClear">清除</vd-button>
ts
const signatureRef = shallowRef();

function handleClear() {
  signatureRef.value.clear();
}

撤销一步操作

通过 undo 方法撤销一步操作。

html
<vd-signature ref="signatureRef" />
<vd-button type="primary" :action="handleUndo">撤销</vd-button>
ts
const signatureRef = shallowRef();

function handleUndo() {
  signatureRef.value.undo();
}

重做一步操作

通过 redo 方法重做一步操作。

html
<vd-signature ref="signatureRef" />
<vd-button type="primary" :action="handleRedo">重做</vd-button>
ts
const signatureRef = shallowRef();

function handleRedo() {
  signatureRef.value.redo();
}

只读模式

通过 readonly 属性配置只读模式。

html
<vd-signature ref="signatureRef" readonly />

API

Props

参数说明类型默认值
width画布宽度string | number100%
height画布高度string | number200
line-color线条颜色string#000
line-width线条宽度string | number2
background画布背景色string#fff
bezier-curve是否使用贝塞尔曲线绘制booleantrue
pressure笔锋(压感)配置,true 等价于 { enable: true }boolean | SignaturePressure-
rotate图片旋转角string | number0
watermark水印配置string | SignatureWatermark-
file-type导出图片类型,可选 png jpgImageExportTypepng
readonly是否只读booleanfalse

SignaturePressure

参数说明类型默认值
enable是否开启笔锋模式booleanfalse
maxWidth最大笔触宽度number5
minWidth最小笔触宽度number2
minSpeed最小速度阈值number1.5

SignatureWatermark

参数说明类型默认值
text水印文字string-
color水印颜色stringrgba(0, 0, 0, 0.1)
fontSize水印字体大小string | number14
fontFamily水印字体stringsans-serif
spaceX水印文字水平间距string | number5
spaceY水印文字垂直间距string | number2
rotate水印旋转角度string | number45

代替原始 Props

参数说明类型默认值
custom-id根节点idstring-
custom-class根节点类名ClassValue-
custom-style根节点样式StyleValue-

Events

事件名说明回调参数
click点击时触发MouseEvent
resize尺寸改变时触发NodeRect
start签名开始时触发SignatureEventData
signing签名进行时触发SignatureEventData
end签名结束时触发SignatureEventData

Expose

方法名 / 属性名说明参数返回值
cxt画布上下文-ShallowRef<UniApp.CanvasContext | null>
rotateCtx旋转画布上下文-ShallowRef<UniApp.CanvasContext | null>
rect画布尺寸与位置-{ width: number; height: number; left: number; top: number }
clear清除签名--
undo撤销一步操作--
redo重做一步操作--
validate校验是否签名-boolean
getImage获取签名图片SignatureImageOptionPromise<string>
getLines获取签名笔迹数据-SignatureLine[]
loadLines加载签名笔迹数据SignatureLine[]-

类型定义

组件导出以下类型定义:

ts
import type {
  SignatureEventData,
  SignatureImageOption,
  SignatureLine,
  SignatureExpose,
  SignatureInstance,
} from 'vital-design';

赣ICP备2025061025号-1