使用帆布怎么实现橡皮筋式线条绘图应用

  介绍

使用帆布怎么实现橡皮筋式线条绘图应用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>什么叫橡皮筋式

指画图时橡皮筋一样伸缩自如. .

例子如下:point_down:

使用帆布怎么实现橡皮筋式线条绘图应用“> </p> <p> <强>思路</强> </p> <p>思路很简单,只有橡皮筋式绘制功能要注意,以下总结mousedown, mousemove, mouseup三个阶段的思路</p> <p> mousedown:记录开始位置,阻力(记录是否处于拖动状态)设置为真的,getImageData(<代码>橡皮筋效果关键1> </代码)</p> <p> mousemove:获取拖动时的位置pos, putImageData(<代码>对应getImageData,橡皮筋效果关键2> </代码),根据pos与开始画直线</p> <p> mouseup:拖动恢复为假</p> <p> <代码>关键> </代码就在于putImageData()与getImageData()这两个帆布的方法,putImageData()记录了鼠标点下时的图像,getImageData()对应还原。如果没有执行这两个方法就会出现以下的效果</p> <p> <img src=,, & lt; canvas  id=癱anvas",宽度=?00“,身高=?00“,风格=氨呔?,1 px  solid 黑色;“祝辞,& lt;/canvas>   ,,,& lt; script 类型=拔谋?javascript"比;   ,,,,,,,let  canvas =, . getelementbyid(& # 39;帆布# 39;),   ,,,,,,,,,,,ctx =, canvas.getContext (& # 39; 2 d # 39;),   ,,,,,,,,,,,canvasLeft =, canvas.getBoundingClientRect () .left,,//getBoundingClientRect()获取元素位置   ,,,,,,,,,,,canvasTop =, canvas.getBoundingClientRect直()上;   ,,,,,,,let  imageData;,//记录图像数据   ,,,,,,,let  start =, new 地图([[& # 39;x # 39;, null], [& # 39; y # 39;, null]]);   ,,,,,,,let  drag =,假;//记录是否处于拖动状态   ,,,,,,,canvas.onmousedown =, function  (e), {   ,,,,,,,,,,,let  pos =, positionInCanvas (e, canvasLeft,, canvasTop);   ,,,,,,,,,,,start.set (& # 39; x # 39;,, pos.x);   ,,,,,,,,,,,start.set (& # 39; y # 39;,, pos.y);   ,,,,,,,,,,,drag =,真的;   ,,,,,,,,,,,//记录imageData   ,,,,,,,,,,,imageData =, ctx.getImageData (0, 0, canvas.width canvas.height);   ,,,,,,,}   ,,,,,,,canvas.onmousemove =, function  (e), {   ,,,,,,,,,,,如果(drag ===, true) {   ,,,,,,,,,,,,,,let  pos =, positionInCanvas (e, canvasLeft,, canvasTop);   ,,,,,,,,,,,,,,//相当于把扫描出来的线都擦掉,重新画   ,,,,,,,,,,,,,,ctx.putImageData (imageData, 0, 0);   ,,,,,,,,,,,,,,ctx.beginPath ();   ,,,,,,,,,,,,,,ctx.moveTo (start.get (& # 39; x # 39;),, start.get (& # 39; y # 39;));   ,,,,,,,,,,,,,,ctx.lineTo (pos.y pos.x也);   ,,,,,,,,,,,,,,ctx.stroke ();   ,,,,,,,,,,,}      ,,,,,,,}   ,,,,,,,canvas.onmouseup =, function , (e), {   ,,,,,,,,,,,drag =,假;   ,,,,,,,}   ,,,,,,,function  positionInCanvas  (e, canvasLeft,, canvasTop),{//获取画布中鼠标点击位置   ,,,,,,,,return  {   ,,,,,,,,,,,,,,,,,x: e.clientX 作用;canvasLeft,   ,,,,,,,,,,,,,,,,,y: e.clientY 作用;canvasTop   ,,,,,,,,,},,,,,,,   ,,,,,,,},,,,      null

使用帆布怎么实现橡皮筋式线条绘图应用