代码实现:
<div class="cav"> <div style="position: absolute;top: 0;z-index: 9999;background: #868380;" onselectstart="return false"> <input type="color" name="选择颜色" id="color"/> <button onclick="lineWidthmax(25)">大号画笔</button> <button onclick="lineWidthmax(12)">中号画笔</button> <button onclick="lineWidthmax(5)">小号画笔</button> <button onclick="lineWidthmax()">画笔加粗</button> <button onclick="lineWidthmin()">画笔变细</button> <button onclick="exportimages()">导出</button> </div> <div id="mb"></div> <div id="x"></div> <div id="y"></div> <p> <canvas id="cs" height="900px;"></canvas> </p> <p> <br/> </p> </div><style> *{margin: 0;padding: 0;} .cav { position: relative; margin: 0 auto; } #x,#y{position: absolute;display: none;z-index: 99;} #x{width: 100%;height: 0;border-bottom: 1px dashed #868380;} #y{width: 0;height: 100%;border-right: 1px dashed #868380;top: 0;} canvas, #mb{border: 1px solid royalblue;display: block;border: 1px solid royalblue;} #mb { height: 900px; /* background: aliceblue; */ z-index: 999; position: absolute; width: 100%; border: none; } button{display: inline-block;width: 6em;height: 2em;margin: 0.2em;vertical-align: text-top;} input{display: inline-block;vertical-align: text-top;}</style><script> var canvas = document.getElementById('cs'); var pen = canvas.getContext('2d'); var color = document.getElementById('color'); var colorvalue = color.value; var xzhou = document.getElementById('x'); var yzhou = document.getElementById('y'); var mb = document.getElementById('mb'); canvas.width = mb.offsetWidth pen.lineCap="round"; colorchange(); // pen.fillStyle = 'block'; // pen.fillRect(0, 0, canvas.width, canvas.height); colorchange(); pen.strokeStyle = 'block'; pen.beginPath(); pen.moveTo(100,100); pen.lineTo(650,100); pen.lineTo(650,330); pen.lineTo(870,330); pen.lineTo(870,670); pen.lineTo(650,670); pen.lineTo(650,870); pen.lineTo(100,870); pen.closePath(); pen.stroke(); function draw(y){ pen.beginPath(); pen.moveTo(120,y+75); pen.lineTo(150,y+75); pen.lineTo(150,y+125); pen.lineTo(120,y+125); pen.closePath(); pen.stroke(); pen.beginPath(); pen.moveTo(150,y+100); pen.lineTo(250,y+100); pen.closePath(); pen.stroke(); } function draw1(y){ pen.beginPath(); pen.moveTo(630,y+75); pen.lineTo(600,y+75); pen.lineTo(600,y+125); pen.lineTo(630,y+125); pen.closePath(); pen.stroke(); pen.beginPath(); pen.moveTo(600,y+100); pen.lineTo(500,y+100); pen.closePath(); pen.stroke(); } for(var i = 1; i < 7; i++){ draw(55 + 50*i); } for(var i = 1; i < 5; i++){ draw1(50*i + 5); } for(var i = 1; i < 3; i++){ draw1(50*i + 545); } // draw(80); color.oninput = colorchange; mb.onmousedown = mousedown; mb.ontouchstart = touchstart; mb.onmouseup = mouseup; mb.ontouchend = mouseup; mb.ontouchmove = touchmove; mb.onmouseout = onmouseout; mb.onmousemove = mousemove; var x=0,y=0,move=false; function colorchange(){ colorvalue = color.value; // console.log(color); strokeStyle(colorvalue); } function lineWidthmax(i=false){ if(i){ pen.lineWidth = i; } else{ pen.lineWidth += 1; } } function lineWidthmin(){ pen.lineWidth -= 1; } function strokeStyle(color){ pen.strokeStyle = color; } function mousedown(e){ e.preventDefault(); var mouseX = e.layerX; var mouseY = e.layerY; // console.log(mouseX); move=true; x=mouseX; y=mouseY; } function touchstart(e){ e.preventDefault(); var mouseX = e.changedTouches[0].pageX; var mouseY = e.changedTouches[0].pageY; move=true; x=mouseX; y=mouseY; } function touchmove(e){ e.preventDefault(); var mouseX = e.changedTouches[0].pageX; var mouseY = e.changedTouches[0].pageY; xzhou.style.display = "block"; xzhou.style.top =mouseY-133 + 'px'; yzhou.style.display = 'block'; yzhou.style.left = mouseX-54 + 'px'; if(move){ pen.beginPath(); pen.moveTo(x,y); pen.lineTo(mouseX-54,mouseY-133); pen.stroke(); } x=mouseX; y=mouseY; } function onmouseout(e){ move = false; xzhou.style.display = "none"; yzhou.style.display = 'none'; } function mousemove(e){ console.log(e); e.preventDefault(); var mouseX = e.layerX; var mouseY = e.layerY; xzhou.style.display = "block"; xzhou.style.top =mouseY + 'px'; yzhou.style.display = 'block'; yzhou.style.left = e.pageX-54 + 'px'; if(move){ pen.beginPath(); pen.moveTo(x,y); pen.lineTo(mouseX,mouseY); pen.stroke(); } x=mouseX; y=mouseY; } function mouseup(e){ e.preventDefault(); move=false } function exportimages(){ let imagesdata = canvas.toDataURL(); let a = document.createElement('a'); a.download = 'images'; a.style.display = 'none'; a.href = imagesdata; document.body.appendChild(a); a.click(); URL.revokeObjectURL(a.href); document.body.removeChild(a); }</script>