如何使用canvas实现橡皮筋式绘图
这篇“如何使用canvas实现橡皮筋式绘图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用canvas实现橡皮筋式绘图”文章吧。
什么叫橡皮筋式
指画图时橡皮筋一样伸缩自如。
例子如下:point_down:
思路
思路很简单,只有橡皮筋式绘制功能要注意,以下总结mousedown,mousemove,mouseup三个阶段的思路
mousedown:记录start位置,drag(记录是否处于拖动状态)设置为true,getImageData( 橡皮筋效果关键1
)
mousemove:获取拖动时的位置pos,putImageData( 对应getImageData,橡皮筋效果关键2
),根据pos与start画直线
mouseup:drag恢复为false
关键
就在于putImageData()与getImageData()这两个canvas的方法,putImageData()记录了鼠标点下时的图像,getImageData()对应还原。如果没有执行这两个方法就会出现以下的效果
putImageData()相当于把“扫描”出来的线都擦掉
代码:
<canvasid="canvas"width="600"height="400"></canvas><scripttype="text/javascript">letcanvas=document.getElementById('canvas'),ctx=canvas.getContext('2d'),canvasLeft=canvas.getBoundingClientRect().left,//getBoundingClientRect()获取元素位置canvasTop=canvas.getBoundingClientRect().top;letimageData;//记录图像数据letstart=newMap([['x',null],['y',null]]);letdrag=false;//记录是否处于拖动状态canvas.onmousedown=function(e){letpos=positionInCanvas(e,canvasLeft,canvasTop);start.set('x',pos.x);start.set('y',pos.y);drag=true;//记录imageDataimageData=ctx.getImageData(0,0,canvas.width,canvas.height);}canvas.onmousemove=function(e){if(drag===true){letpos=positionInCanvas(e,canvasLeft,canvasTop);//相当于把扫描出来的线都擦掉,重新画ctx.putImageData(imageData,0,0);ctx.beginPath();ctx.moveTo(start.get('x'),start.get('y'));ctx.lineTo(pos.x,pos.y);ctx.stroke();}}canvas.onmouseup=function(e){drag=false;}functionpositionInCanvas(e,canvasLeft,canvasTop){//获取canvas中鼠标点击位置return{x:e.clientX-canvasLeft,y:e.clientY-canvasTop}}</script>
以上就是关于“如何使用canvas实现橡皮筋式绘图”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。