205 lines
4.9 KiB
JavaScript
205 lines
4.9 KiB
JavaScript
|
|
||
|
Component({
|
||
|
behaviors: ["wx://form-field"], //,"wx://form-field-group"
|
||
|
/**
|
||
|
* 组件的对外属性
|
||
|
*/
|
||
|
properties: {
|
||
|
show: {
|
||
|
type: Boolean,
|
||
|
value: false,
|
||
|
},
|
||
|
canvasId:{
|
||
|
type:String,
|
||
|
value:"mkl_canvas"
|
||
|
},
|
||
|
imageUrl:{
|
||
|
value:"",
|
||
|
type: String
|
||
|
}
|
||
|
},
|
||
|
observers:{
|
||
|
imageUrl(val){
|
||
|
if(val.length <= 0){
|
||
|
this.cleardraw()
|
||
|
this.setData({
|
||
|
showimg:true
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* 组件的初始数据
|
||
|
*/
|
||
|
data: {
|
||
|
signShow:false,
|
||
|
context : null,// 使用 wx.createContext 获取绘图上下文
|
||
|
isButtonDown : false,
|
||
|
arrx : [],
|
||
|
arry : [],
|
||
|
arrz : [],
|
||
|
canvasw : 0,
|
||
|
canvash : 0,
|
||
|
showimg:true,
|
||
|
height:'',
|
||
|
btnHeight:'',
|
||
|
type:0
|
||
|
},
|
||
|
/**
|
||
|
* 组件的方法列表
|
||
|
*/
|
||
|
ready: function () {
|
||
|
let properties = this.properties;
|
||
|
let that = this;
|
||
|
setTimeout(function(){
|
||
|
if(properties.imageUrl){
|
||
|
that.setData({
|
||
|
showimg: false,
|
||
|
type:1,
|
||
|
imageUrl:properties.imageUrl
|
||
|
})
|
||
|
}else{
|
||
|
that.setData({
|
||
|
type:0
|
||
|
})
|
||
|
}
|
||
|
},400);
|
||
|
|
||
|
this.init()
|
||
|
},
|
||
|
methods: {
|
||
|
init(){
|
||
|
let that = this;
|
||
|
wx.getSystemInfo({
|
||
|
success: function(res){
|
||
|
that.setData({
|
||
|
height:(res.windowHeight-150)+"px",
|
||
|
btnHeight:(res.windowHeight-150) / 3+"px"
|
||
|
})
|
||
|
}
|
||
|
})
|
||
|
//获取系统信息
|
||
|
wx.getSystemInfo({
|
||
|
success: function (res) {
|
||
|
const {canvasId} = that.properties;
|
||
|
// 使用 wx.createContext 获取绘图上下文 context
|
||
|
let context = wx.createCanvasContext(canvasId,that);
|
||
|
context.beginPath()
|
||
|
context.setStrokeStyle('#000000');
|
||
|
context.setLineWidth(4);
|
||
|
context.setLineCap('round');
|
||
|
context.setLineJoin('round');
|
||
|
that.setData({
|
||
|
context:context,
|
||
|
canvasw :res.windowWidth,//设备宽度
|
||
|
canvash : res.windowHeight, //设备高度
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
},
|
||
|
canvasIdErrorCallback: function (e) {
|
||
|
console.error(e.detail.errMsg)
|
||
|
},
|
||
|
//绘制开始
|
||
|
canvasStart: function (event) {
|
||
|
let {arrz,arrx,arry}= this.data;
|
||
|
arrz.push(0);
|
||
|
arrx.push(event.changedTouches[0].x);
|
||
|
arry.push(event.changedTouches[0].y);
|
||
|
this.setData({
|
||
|
isButtonDown : true,
|
||
|
arrz,arrx,arry
|
||
|
})
|
||
|
},
|
||
|
//绘制过程
|
||
|
canvasMove: function (event) {
|
||
|
let {arrz,arrx,arry,isButtonDown,context,canvasw,canvash}= this.data;
|
||
|
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);
|
||
|
this.setData({
|
||
|
arrz,arrx,arry,context,canvasw,canvash
|
||
|
})
|
||
|
},
|
||
|
canvasEnd: function (event) {
|
||
|
this.setData({
|
||
|
isButtonDown : false
|
||
|
})
|
||
|
},
|
||
|
cleardraw: function () {
|
||
|
let {arrz,arrx,arry,context,canvasw,canvash}= this.data;
|
||
|
//清除画布
|
||
|
arrx = [];
|
||
|
arry = [];
|
||
|
arrz = [];
|
||
|
if(context != null){
|
||
|
context.clearRect(0, 0, canvasw, canvash);
|
||
|
context.draw(true);
|
||
|
this.setData({
|
||
|
arrz,arrx,arry,context,canvasw,canvash
|
||
|
})
|
||
|
}
|
||
|
|
||
|
},
|
||
|
//导出图片
|
||
|
getimg: function () {
|
||
|
this.triggerEvent("addto",true);
|
||
|
let {arrx}= this.data;
|
||
|
if (arrx.length == 0) {
|
||
|
wx.showModal({
|
||
|
title: '提示',
|
||
|
content: '签名内容不能为空!',
|
||
|
showCancel: false
|
||
|
});
|
||
|
return false;
|
||
|
};
|
||
|
const {canvasId} = this.properties;
|
||
|
//生成图片
|
||
|
let that = this;
|
||
|
wx.canvasToTempFilePath({
|
||
|
canvasId: canvasId,
|
||
|
success: function (res) {
|
||
|
that.setData({
|
||
|
imageUrl:res.tempFilePath,
|
||
|
signShow:false,
|
||
|
showimg:false,
|
||
|
type:0
|
||
|
})
|
||
|
that.triggerEvent("returnData",res.tempFilePath);
|
||
|
}
|
||
|
},this)
|
||
|
},
|
||
|
showSign:function(){
|
||
|
this.triggerEvent("addto",false);
|
||
|
this.setData({
|
||
|
signShow:true,
|
||
|
})
|
||
|
},
|
||
|
onClose:function(){
|
||
|
this.triggerEvent("addto",true);
|
||
|
this.setData({
|
||
|
signShow:false,
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
});
|