|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- Component({
- /**
- * 组件的初始数据
- */
- data: {
- tempFilePath: '',
- hideModal: false,
- hasDraw: false,
- canvasName: '#writeCanvas',
- ctx: '',
- canvasWidth: 0,
- canvasHeight: 0,
- startPoint: {
- x: 0,
- y: 0,
- },
- selectColor: 'black',
- lineColor: '#1A1A1A', // 颜色
- lineSize: 1, // 笔记倍数
- radius: 4, //画圆的半径
- },
- // 初始化画布
- ready() {
- this.setData({
- hideModal: false
- })
- let that = this
- let query = wx.createSelectorQuery().in(this);
- //获取自定义组件的SelectQuery对象
- this.canvasCtx = wx.createCanvasContext('signature', that)
- // 设置线的样式
- this.canvasCtx.setLineCap("round");
- this.canvasCtx.setLineJoin("round");
- // 初始化颜色
- this.canvasCtx.setStrokeStyle(that.data.selectColor);
- // 初始化粗细
- query.select('.modal-canvas').boundingClientRect(rect => {
- this.setData({
- canvasWidth: rect.width,
- canvasHeight: rect.height,
- });
- }).exec();
- },
- // 方法列表
- methods: {
- scaleStart(event) {
- if (event.type != 'touchstart') return false;
- let currentPoint = {
- x: event.touches[0].x,
- y: event.touches[0].y
- }
- // this.data.ctx.moveTo(currentPoint.x, currentPoint.y)
- this.drawCircle(currentPoint);
- this.setData({
- startPoint: currentPoint,
- hasDraw: true, //签字了
- });
- },
- mouseDown() {},
- scaleEnd(e) {
- this.setData({
- isStart: true
- })
- },
- scaleMove(event) {
- if (event.type != "touchmove") return false;
- let {
- startPoint
- } = this.data
- let currentPoint = {
- x: event.touches[0].x,
- y: event.touches[0].y
- }
-
- this.drawLine(startPoint, currentPoint)
- this.setData({
- startPoint: currentPoint
- })
- },
- drawCircle(point) { //这里负责点
- let ctx = this.canvasCtx;
- ctx.beginPath();
- ctx.setFillStyle(this.data.lineColor)
- //笔迹粗细由圆的大小决定
- ctx.arc(point.x, point.y, this.data.radius, 0, 2 * Math.PI);
- ctx.fill();
- ctx.closePath();
- ctx.draw(true)
- },
- drawLine(sourcePoint, targetPoint) {
- let ctx = this.canvasCtx;
- this.drawCircle(targetPoint);
- ctx.beginPath();
- ctx.setStrokeStyle(this.data.lineColor)
- ctx.setLineWidth(this.data.radius * 2)
- ctx.moveTo(sourcePoint.x, sourcePoint.y);
- ctx.lineTo(targetPoint.x, targetPoint.y);
- ctx.stroke();
- ctx.closePath();
- },
- clearCanvas() {
- //清空画布
- let ctx = this.canvasCtx;
- ctx.clearRect(0, 0, this.data.canvasWidth, this.data.canvasHeight);
- ctx.fillStyle = 'rgba(0, 0, 0, .1)';
- ctx.draw()
- this.setData({
- hasDraw: false //未签字
- })
- },
- save(cb) {
- let that = this
- let {
- hasDraw,
- } = this.data
- if (!hasDraw) {
- wx.showToast({
- title: '您还未签名!',
- icon: 'none',
- mask: true
- })
- return
- } else {
- let {
- canvasHeight,
- canvasWidth
- } = that.data;
- wx.canvasToTempFilePath({
- x: 0,
- y: 0,
- width: canvasWidth,
- height: canvasHeight,
- destWidth: 200,
- destHeight: 80,
- canvasId: 'signature',
- canvas: that.data.ctx,
- fileType: "png",
- success(res) {
- console.log(res)
- if (res.tempFilePath) {
- // 文件转base64
- wx.getFileSystemManager().readFile({
- filePath: res.tempFilePath,
- encoding: "binary",
- success: (val) => {
- cb && cb(val, res);
- that.triggerEvent("saveToImageEvent", val.data);
- },
- });
- }
- },
- fail(err) {
- console.log(err);
- }
- }, that)
- }
- },
- }
- })
|