赞
踩
在移动端或者PC端我们来模拟画板的实现, 支持清除和导出功能,此处简单实现,仅作开发参考。
/* 此模块用于实现签名绘图功能 */ // 需要用到的变量定义 let clickX = new Array(); let clickY = new Array(); let clickDrag = new Array(); let paint; let point = {notFirst:false}; let canvasDiv = null; // 初始化画布父盒子 let canvas = document.createElement('canvas'); // 创建画板 let context = canvas.getContext("2d"); // 创建2d画布 let canvasWidth = 0; // 初始化画布宽度 let canvasHeight = 0; // 初始化画布高度 // 可导出图片的标识 let _exportable = false; /* ------------ 需要用到的一些功能函数 ------------ */ function addClick(x, y, dragging) { clickX.push(x); clickY.push(y); clickDrag.push(dragging); } function draw(){ _exportable = true; while (clickX.length > 0 ) { point.bx = point.x; point.by = point.y; point.x = clickX.pop(); point.y = clickY.pop(); point.drag = clickDrag.pop(); context.beginPath(); if (point.drag && point.notFirst) { context.moveTo(point.bx, point.by); } else { point.notFirst = true; context.moveTo(point.x - 1, point.y); } context.lineTo(point.x, point.y); context.closePath(); context.stroke(); } } /* 创建画布背景和画笔 */ function create() { // 以下是创建画布背景 context.rect(0, 0, canvasWidth, canvasHeight); context.fillStyle="#f2f2f2"; // 图片北京色是灰色,此处去除会变黑色 context.fill(); // 设置画笔属性 context.strokeStyle = "#666"; context.lineJoin = "round"; context.lineWidth = 2; // 默认值清理 clickX = new Array(); clickY = new Array(); clickDrag = new Array(); _exportable = false; } export default { /* 初始化 */ init(canvasDivDom, classname) { canvasDiv = canvasDivDom; // 传入画布父盒子 canvasWidth = canvasDiv.clientWidth; // 获取父盒子宽度 canvasHeight = canvasDiv.clientHeight; // 获取父盒子高度 // 设置属性并追加元素 canvas.setAttribute('width', canvasWidth); canvas.setAttribute('height', canvasHeight); canvasDiv.appendChild(canvas); // 创建画布背景和画笔 create(); // 开始监控画图 this.listen(classname); }, /* 画图时的监控 */ listen(classname) { // 获取盒子需要的参数 let left = canvas.getBoundingClientRect().left; let top = canvas.getBoundingClientRect().top; // 支持 移动端 canvasDiv.addEventListener("touchstart", function(e){ paint = true; classname && (this.className = classname); (e.touches) && (e = e.touches[0]); addClick(e.pageX - left, e.pageY - top); draw(); }); canvasDiv.addEventListener("touchmove", function(e){ if(!paint) { return; } (e.touches) && (e = e.touches[0]); addClick(e.pageX - left, e.pageY - top, true); draw(); }); canvasDiv.addEventListener("touchend", function(e){ paint = false; }); // 支持 PC 端 canvasDiv.addEventListener("mousedown", function(e){ paint = true; classname && (this.className = classname); addClick(e.pageX - left, e.pageY - top); draw(); }); canvasDiv.addEventListener("mousemove", function(e){ if(!paint) { return; } addClick(e.pageX - left, e.pageY - top, true); draw(); }); canvasDiv.addEventListener("mouseup", function(e){ paint = false; }); canvasDiv.addEventListener("mouseleave", function(e){ paint = false; }); }, /* 清理 */ clear() { // 使用此方式来清理画布 canvas.width = canvas.width; canvas.height = canvas.height; create(); // 重新创建画布背景和画笔 _exportable = false; // 清理之后无法导出 }, /* 导出图片 */ exportImg() { if(!_exportable) { return -1; // 说明此处无法导出图片 } return canvas.toDataURL("image/png"); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。