// 注意两点 一、canvash 变量,主要控制签名操作画布尺寸,设置不当超出一屏会出现问题;二、撤销重绘时 因绘制机制 所以需要要用.slice(0)重新定义数组
// canvas 全局配置
var context = null;// 使用 wx.createContext 获取绘图上下文 context
var isButtonDown = false;
var arrx = [];
var arry = [];
var arrz = [];
var canvasw = 0;
var canvash = 0;
var history = []
var canvasNnm = 0
const app = getApp()
//注册页面
Page({
data: {
pageNumebers: 0,
name: []
},
onLoad: function (options) {
let vm = this
let name = '你好你好你'
let namearr = []
for (var i = 0; i < name.length; i++) {
namearr.push(name.substr(i, 1))
}
this.setData({
name: namearr
})
//获取系统信息
wx.getSystemInfo({
success: function (res) {
canvasw = res.windowWidth;//设备宽度
canvash = (parseInt(res.windowHeight / 3) + 1) * vm.data.name.length
}
});
},
onReady() {
// 使用 wx.createContext 获取绘图上下文 context
context = wx.createCanvasContext('canvas');
context.beginPath()
context.setStrokeStyle('#000000');
context.setLineWidth(4);
context.setLineCap('round');
context.setLineJoin('round');
},
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
},
//开始解除屏幕
canvasStart: function (event) {
isButtonDown = true;
arrz.push(0);
arrx.push(event.changedTouches[0].x);
arry.push(event.changedTouches[0].y);
},
//签字过程
canvasMove: function (event) {
if (isButtonDown) {
arrz.push(1);
arrx.push(event.changedTouches[0].x);
arry.push(event.changedTouches[0].y);
};
for (var i = 0; i < arrx.length; i++) {
if (arrz[i] == 0) {
context.moveTo(arrx[i], arry[i])
} else {
context.lineTo(arrx[i], arry[i])
};
};
context.clearRect(0, 0, canvasw, canvash);
context.setStrokeStyle('#000000');
context.setLineWidth(4);
context.setLineCap('round');
context.setLineJoin('round');
context.stroke();
context.draw(false);
},
//每次签字结束,断笔
canvasEnd: function (event) {
isButtonDown = false;
canvasNnm = canvasNnm + 1
var obj = JSON.stringify({
a: canvasNnm,
arrz: arrz,
arrx: arrx,
arry: arry
})
history.push(JSON.parse(obj))
console.log(history)
},
//撤销操作
chexiao() {
canvasNnm = canvasNnm - 1 < 0 ? 0 : canvasNnm - 1
if (canvasNnm == 0) {
this.cleardraw()
return
};
console.log(canvasNnm)
arrx = history[canvasNnm - 1].arrx.slice(0)
arry = history[canvasNnm - 1].arry.slice(0)
arrz = history[canvasNnm - 1].arrz.slice(0)
for (var i = 0; i < arrx.length; i++) {
if (arrz[i] == 0) {
context.moveTo(arrx[i], arry[i])
} else {
context.lineTo(arrx[i], arry[i])
}
};
context.setStrokeStyle('#000000');
context.setLineWidth(4);
context.setLineCap('round');
context.setLineJoin('round');
context.clearRect(0, 0, canvasw, canvash);
context.stroke();
context.draw(false);
console.log(canvasNnm)
history.splice(canvasNnm, 1)
console.log("history", history)
},
//清空面板
cleardraw: function () {
history = []
canvasNnm = 0
//清除画布
arrx = [];
arry = [];
arrz = [];
context.clearRect(0, 0, canvasw, canvash);
context.draw(true);
},
//导出图片
getimg: function () {
let vm = this
if (arrx.length == 0) {
wx.showModal({
title: '提示',
content: '签名内容不能为空!',
showCancel: false
});
return false;
};
//生成图片
wx.canvasToTempFilePath({
canvasId: 'canvas',
success: function (res) {
console.log(res.tempFilePath);
vm.setData({
img: res.tempFilePath
})
}
})
},
prev() {
let vm = this
if (vm.data.pageNumebers == 0) return
this.setData({
pageNumebers: vm.data.pageNumebers - 1
})
console.log("history", history)
},
next() {
let vm = this
let num = 5
let pagenum = num / 3 == 0 ? num / 3 : parseInt(num / 3) + 1
if (pagenum == vm.data.pageNumebers + 1) return
this.setData({
pageNumebers: vm.data.pageNumebers + 1
})
console.log("history", history)
}
})
微信小程序canvas画板手写签名
4星 · 超过85%的资源 需积分: 50 78 浏览量
2020-03-12
14:28:17
上传
评论 4
收藏 34KB ZIP 举报
qq_34423569
- 粉丝: 0
- 资源: 1
最新资源
- 基于PyTorch+Bert预训练模型的中文新闻文本分类项目源代码,包含前后端,采用vue+flask,开箱即用
- 系统硬件信息获取工具lshw-B.02.18源码
- MusicYOLO-使用YOLOX目标检测算法来检测声谱图中的音符-附项目源码-优质项目实战.zip
- OpenOCD Windows 打包好的
- 数据集:深证中小板日线数据,截止 2017.05.05,原始价、前复权价、后复权价,852支股票.rar
- 批量下载检测报告.zip
- u=138704656,2508719391&fm=253&fmt=auto&app=138&f=JPEG.webp
- Midjourney关键词手册-所有常用关键词大全+控制角色一致性方法
- 基于区块链的多辅助计算卸载
- C# OpenCvSharp 模拟生成车辆运行视频.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈