<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ border: 1px solid #bcbcbc; } </style> </head> <body> <div id="canvasdiv"> <canvas id="canvas"></canvas> </div> <button type="button" class="layui-btn layui-btn-normal" id="clear" style="display: none" onclick="clear_all()" onsubmit="return false;"></button> </body> <script type="text/javascript"> var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); var base64data=''; canvas.width="320" canvas.height="240" //页面不出现滚动滑动 $("html,body").css("overflow","hidden").css("height","100%"); document.body.addEventListener('touchmove', self.welcomeShowedListener, false); //画一个黑色矩形 ctx.fillStyle = "rgba(225,225,225,0)";//绘制填充颜色 透明色 ctx.fillRect(0, 0,320,240);//绘制一个被填充的矩形 //按下标记 var onoff = false; //定义起始位置 var oldx = 0; var oldy = 0; //设置画笔颜色默认为黑色 var linecolor = "black"; //画笔宽度默认为4 var linw = 4; //判断是触摸还是鼠标 if (document.body.ontouchstart !== undefined) { //执行touch代码 // 手指按下 canvas.ontouchstart = e => { painting = true const event = e.touches[0] ctx.lineCap = 'round' ctx.lineJoin = 'round' const x = event.pageX const y = event.pageY ctx.beginPath() ctx.moveTo(x, y) ctx.lineWidth = linw ctx.strokeStyle = linecolor } // 手指移动 canvas.ontouchmove = e => { if (!painting) { return } const event = e.touches[0] const x = event.pageX const y = event.pageY ctx.lineTo(x, y) ctx.stroke() } // 手指抬起 canvas.ontouchend = () => { if (!painting) { return false } painting = false ctx.closePath() } // 手指离开区域 ontouchcancel = () => { if (!painting) { return false } painting = false ctx.closePath() } } else { //鼠标移动事件,事件绑定 // 执行mouse代码 canvas.addEventListener("mousemove", draw); canvas.addEventListener("mousedown", down); canvas.addEventListener("mouseup", up); } // 下笔时按下标记打开,给oldx、oldy赋值 function down(event) { onoff = true; oldx = event.pageX; oldy = event.pageY; } //检测鼠标离开后,按下标记关闭 function up() { onoff = false; } //画图,按下标记打开 function draw(event) { if (onoff == true) { var newx = event.pageX ; var newy = event.pageY; // 起始一条路径,或重置当前路径。 ctx.beginPath(); // 把路径移动到画布中的指定点,不创建线条。 ctx.moveTo(oldx, oldy); // 添加一个新点,然后在画布中创建从该点到最后指定点的线条。 ctx.lineTo(newx, newy); // 设置或返回用于笔触的颜色、渐变或模式。 ctx.strokeStyle = linecolor; // 设置或返回当前的线条宽度。 ctx.lineWidth = linw; // 设置或返回线条的结束端点样式。 ctx.lineCap = "round"; // 绘制已定义的路径。 ctx.stroke(); oldx = newx; oldy = newy; } } // 生成图片 function generate_picture() { const dataImg = new Image(); // canvas生成图片 dataImg.src = canvas.toDataURL('image/png'); }; //清理画布 function clear_all() { ctx.fillStyle = 'rgba(225,225,225,0)'; ctx.fillRect(0, 0, 320,240); }; // 下载图片 function download_picture() { const dataImg = new Image(); dataImg.src = canvas.toDataURL('image/png'); document.querySelector('#image').appendChild(dataImg) const alink = document.createElement("a"); alink.href = dataImg.src; alink.download = "testImg.jpg"; alink.click(); } </script> </html>
canvas画板(鼠标和触摸)
打印