在微信小程序中实现电子签名功能方式很多,本文采用canvas绘制的方式实现。具体实现步骤如下:
- 在页面中添加canvas元素
<view class="container">
<canvas canvas-id="signCanvas" class="canvas" disable-scroll=true @touchstart="startDrawing" @touchmove.stop="moveDrawing" @touchend="stopDrawing"></canvas>
<button type="primary" bindtap="saveSignature">完成</button>
<button type="primary" bindtap="clearCanvas">清除</button>
</view>
- 定义签名相关的数据和方法
Page({
data: {
isDrawing: false,
lastPoint: {}
},
startDrawing(e) {
const { x, y } = e.touches[0];
this.data.lastPoint = { x, y };
this.data.isDrawing = true;
},
stopDrawing() {
this.data.isDrawing = false;
},
moveDrawing(e) {
if (!this.data.isDrawing) return;
const ctx = wx.createCanvasContext('signCanvas');
ctx.moveTo(this.data.lastPoint.x, this.data.lastPoint.y);
const { x, y } = e.touches[0];
ctx.lineTo(x, y);
ctx.stroke();
ctx.draw(true);
this.data.lastPoint = { x, y };
},
clearCanvas() {
const ctx = wx.createCanvasContext('signCanvas');
ctx.clearRect(0, 0, 300, 150);
ctx.draw();
},
saveSignature() {
wx.canvasToTempFilePath({
canvasId: 'signCanvas',
success: res => {
// 将签名图片上传到服务器或进行其他操作
console.log(res.tempFilePath);
}
})
}
})
- 实现绘制签名的功能
- 通过canvas的触摸事件(touchstart、touchmove、touchend)获取手指在canvas上的坐标点
- 使用wx.createCanvasContext(‘signCanvas’)获取canvas的渲染上下文
- 在touchstart时记录起始点坐标
- 在touchmove时,使用moveTo和lineTo连接前后两个点,并使用stroke描边
- 在touchend时,停止绘制
- 清空和保存签名
- 提供清空按钮,调用clearRect清空canvas
- 提供保存按钮,调用wx.canvasToTempFilePath将canvas绘制内容保存为临时文件,可将文件上传到服务器保存
以上代码实现了基本的电子签名功能,包括绘制签名、清空和保存签名的操作。在实际使用中,你可以根据需求对界面样式、签名线条样式等进行自定义调整。