You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
8.4 KiB
245 lines
8.4 KiB
# v-sign 手写签名
|
|
|
|
**如有问题或者建议,欢迎留言或加群联系我(群号:736123963)!!!将保持维护!!!**
|
|
|
|
<img src="https://i.loli.net/2021/12/02/bgsfnDmCzXGq8ct.png" alt="uniapp 交流群群聊二维码" style="zoom: 80%;" />
|
|
|
|
## 快速使用
|
|
|
|
基础示例,具体说明见下方 API,**若需要使用内置子组件,见下方子组件说明。**
|
|
|
|
```html
|
|
<template>
|
|
<v-sign :width="winWidth + 'px'" @init="onSignInit"></v-sign>
|
|
<button @click="clear">清空<button>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
winWidth: 0
|
|
}
|
|
},
|
|
created() {
|
|
// 宽度设为可使用窗口宽度
|
|
const { windowWidth } = uni.getSystemInfoSync()
|
|
this.winWidth = windowWidth
|
|
},
|
|
methods: {
|
|
onSignInit(signCtx) {
|
|
this.signCtx = signCtx
|
|
},
|
|
// 清空
|
|
clear() {
|
|
this.signCtx.clear()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
```
|
|
|
|
## API
|
|
|
|
### 属性 (Props)
|
|
|
|
| 属性名 | 类型 | 默认值 | 说明 |
|
|
| :---------: | :-----------: | :-----------: | :--------------------------: |
|
|
| cid | String | v-sign-时间戳 | canvas id |
|
|
| width | String/Number | - | canvas 宽度,Number 单位 rpx |
|
|
| height | String/Number | - | canvas 高度,Number 单位 rpx |
|
|
| customStyle | Object | - | canvas 自定义样式 |
|
|
| lineWidth | Number | 4 | 线宽,单位 px |
|
|
| lineColor | String | #333 | 线颜色 |
|
|
| bgColor | String | #fff | 画布背景颜色 |
|
|
|
|
### 事件(Events)
|
|
|
|
| 事件称名 | 说明 | 返回值 |
|
|
| :------: | :------------------------------------------------------------: | :--------------------------------: |
|
|
| @init | 创建完 canvas 实例后触发,向外提供 canvas 实例,撤回,清空方法 | Object:具体见下方事件回调参数说明 |
|
|
| @clear | 清空画布后触发 | - |
|
|
| @revoke | 撤销操作后触发 | 坐标信息数组 |
|
|
| @end | 每次绘制结束后触发 | 坐标信息数组 |
|
|
|
|
### 事件回调参数说明
|
|
|
|
#### **`init(ctx: SignContext)`**
|
|
|
|
可以通过该事件回调暴露的 clear、revoke 等方法操作画布。
|
|
|
|
```java
|
|
interface SignContext {
|
|
// canvas 实例
|
|
ctx: object;
|
|
// 清空画布
|
|
clear(): void;
|
|
// 撤回
|
|
revoke(): void;
|
|
// 保存 png 图片,文件名 filename 配置仅支持 h5
|
|
saveImage(filename: string): Promise<object>;
|
|
// 返回图片临时文件路径,config 参数同 uni.canvasToTempFilePath方法,内部只是做了 Promise 化处理而已
|
|
canvasToTempFilePath(config: object): Promise<object>;
|
|
// 设置画布背景色
|
|
setBackgroundColor(color: string): void;
|
|
setLineWidth(value: number): void;
|
|
setLineColor(value: string): void;
|
|
// 获取坐标信息数组
|
|
getLineData(): Array<object>;
|
|
}
|
|
```
|
|
|
|
示例:
|
|
|
|
```html
|
|
<template>
|
|
<v-sign @init="onSignInit"></v-sign>
|
|
<button @click="clear">清空<button>
|
|
<button @click="revoke">撤回<button>
|
|
<button @click="saveTempFilePath">保存临时图片路径<button>
|
|
<button @click="saveImage">保存图片<button>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
methods: {
|
|
onSignInit(signCtx) {
|
|
this.signCtx = signCtx
|
|
},
|
|
// 清空
|
|
clear() {
|
|
this.signCtx.clear()
|
|
},
|
|
// 撤回
|
|
revoke() {
|
|
this.signCtx.revoke()
|
|
},
|
|
// 保存为临时图片路径,h5返回 base64
|
|
saveTempFilePath() {
|
|
this.signCtx.canvasToTempFilePath()
|
|
},
|
|
// 保存 png 图片
|
|
saveImage() {
|
|
this.signCtx.saveImage()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
```
|
|
|
|
# 子组件
|
|
|
|
子组件需要包裹在 `v-sign` 组件内使用!!!
|
|
|
|
## 按钮控件(v-sign-action)
|
|
|
|
### 示例
|
|
|
|
```html
|
|
<template>
|
|
<v-sign>
|
|
<v-sign-action @save="save" @clear="clear" @prev="revoke"></v-sign-action>
|
|
</v-sign>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
methods: {
|
|
save(tempFilePath) {
|
|
console.log(tempFilePath);
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
```
|
|
|
|
### API
|
|
|
|
### 属性 (Props)
|
|
|
|
| 属性名 | 类型 | 默认值 | 说明 |
|
|
| :---------: | :-----------: | :-----------------------: | :----------------------------------------------------: |
|
|
| actions | Array | ["clear", "prev", "save"] | 按钮配置;清空(clear), 撤回(prev) 保存图片(save) |
|
|
| border | Boolean | true | 按钮是否有边框 |
|
|
| space | String/Number | 12 | 按钮间隔,Number 单位 rpx |
|
|
| customStyle | Object | - | 根元素自定义样式 |
|
|
|
|
### 事件(Events)
|
|
|
|
点击对应类型按钮触发对应事件, 例如:配置了清空(clear)按钮,点击则触发 clear 事件。
|
|
|
|
---
|
|
|
|
## 画笔组件(v-sign-pen)
|
|
|
|
### 示例
|
|
|
|
```html
|
|
<template>
|
|
<v-sign>
|
|
<v-sign-pen></v-sign-pen>
|
|
</v-sign>
|
|
</template>
|
|
<script>
|
|
export default {};
|
|
</script>
|
|
```
|
|
|
|
### API
|
|
|
|
### 属性 (Props)
|
|
|
|
| 属性名 | 类型 | 默认值 | 说明 |
|
|
| :---------: | :-----: | :--------------: | :--------------------------: |
|
|
| type | String | circle | 选项样式,可选 circle \ line |
|
|
| label | String | - | 标签 |
|
|
| sizes | Array | [2, 4, 6, 8, 10] | 画笔尺寸数组,单位 px |
|
|
| color | String | #333 | 选项颜色 |
|
|
| activeColor | String | #333 | 选中项颜色 |
|
|
| border | Boolean | true | 选中项是否有边框 |
|
|
| borderWidth | Number | 4 | 边框大小,单位 rpx |
|
|
| space | Number | 20 | 选项间隙,单位 rpx |
|
|
| bigger | Number | 2 | 圆点变大变粗倍数 |
|
|
| minSize | Number | 4 | 圆点最小尺寸,单位 px |
|
|
|
|
### 事件(Events)
|
|
|
|
| 事件称名 | 说明 | 返回值 |
|
|
| :------: | :----------------: | :----------------: |
|
|
| @change | 选择画笔大小时触发 | size:画笔尺寸大小 |
|
|
|
|
---
|
|
|
|
## 颜色选择器组件(v-sign-color)
|
|
|
|
### 示例
|
|
|
|
```html
|
|
<template>
|
|
<v-sign>
|
|
<v-sign-color></v-sign-color>
|
|
</v-sign>
|
|
</template>
|
|
<script>
|
|
export default {};
|
|
</script>
|
|
```
|
|
|
|
### API
|
|
|
|
### 属性 (Props)
|
|
|
|
| 属性名 | 类型 | 默认值 | 说明 |
|
|
| :---------: | :-----------: | :-------------------------------------------------------------: | :-------------------: |
|
|
| type | String | square | 选项样式,可选 circle |
|
|
| color | String | - | 默认颜色 |
|
|
| options | Array | ['#333', '#f44236', '#3f51b5', '#2195f3', '#ffeb3b', '#ff9900'] | 备选色 |
|
|
| size | Number/String | 44 | 圆/方形大小,单位 rpx |
|
|
| tick | Boolean | true | 是否选中打勾 |
|
|
| tickSize | Number/String | 24 | 勾大小 |
|
|
| borderColor | String | #fff | 边框颜色 |
|
|
| border | Boolean | false | 是否有边框 |
|
|
| space | Number/String | 16 | 选项间隙 |
|
|
|
|
### 事件(Events)
|
|
|
|
| 事件称名 | 说明 | 返回值 |
|
|
| :------: | :------------: | :----: |
|
|
| @change | 选择颜色时触发 | color |
|
|
|