视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详细介绍HTML5简易在线画图工具的实现案例
2020-11-27 15:10:19 责编:小采
文档


继上次学习了HTML5的路径画圆做了动态时钟、异次元空间的反转做了运动的太阳系,这两天将画线、画圆、填充等知识点结合起来做了一个简易的在线画图工具:

查看DEMO:HTML5简易在线画图工具

功能包括自由画笔、橡皮擦、文字填充、画三角形、画圆等,相对我这个新手来说,感觉挺难的,不过还是参考了资料慢慢“拼”出来了。

自由画笔的思路:

/******* 自由画笔 *******/
function dBrush(n){
 setStatus(actions,n,1);
 //鼠标按下的时候
 var status = 0;
 canvas.onmousedown=function(e){
 e=window.event||e;
 var sX=e.pageX-this.offsetLeft;
 var sY=e.pageY-this.offsetTop;
 can.beginPath();
 can.moveTo(sX,sY);
 status=1;
 }
 //鼠标移动的时候
 canvas.onmousemove=function(e){
 e=window.event||e;
 var eX=e.pageX-this.offsetLeft;
 var eY=e.pageY-this.offsetTop;
 if(status==1){
 can.lineTo(eX,eY);
 can.stroke();
 }else {return false}
 
 }
 //鼠标抬起的时候
 canvas.onmouseup=function(){
 can.closePath();
 status=0; 
 }
 //鼠标移出canvas画布结束画图
 canvas.onmouseout=function(){
 can.closePath();
 status=0;
 }
}

填充文字,主要用到fillText(val,x,y):

/******* 文字 *******/
function dText(n){
 setStatus(actions,n,1);
 canvas.onmousedown=function(e){
 e=window.event||e;
 var x=e.pageX-this.offsetLeft;
 var y=e.pageY-this.offsetTop;
 var val = window.prompt('输入填充的文字','');
 if(val==null) return false; //输入为空则返回
 can.fillText(val,x,y);
 dBrush(0); //填入文字后返回自由画笔工具
 }
 canvas.onmouseup=null;
 canvas.onmousemove=null;
 canvas.onmouseout=null;
}

直线工具,主要确定起点和终点,然后lineTo(x,y)就可以了:

/******* 直线 *******/
function dLine(n){
 setStatus(actions,n,1);
 //画直线,鼠标按下时,当前鼠标位置为起点
 canvas.onmousedown=function(e){
 e=window.event||e;
 var sX=e.pageX-this.offsetLeft;
 var sY=e.pageY-this.offsetTop;
 can.beginPath();
 can.moveTo(sX,sY);
 }
 //画直线,鼠标抬起时,当前鼠标位置为终点
 canvas.onmouseup=function(e){
 e=window.event||e;
 var eX=e.pageX-this.offsetLeft;
 var eY=e.pageY-this.offsetTop;
 can.lineTo(eX,eY);
 can.closePath();
 can.stroke();
 }
 canvas.onmousemove=null;
 canvas.onmouseout=null;
}

最后贴一个空心圆,起点坐标为圆心,鼠标移动距离为半径:

/******* 空心圆圈 *******/
function dArc(n){
 setStatus(actions,n,1);
 var sX=0; //内部的“全局标量”
 var sY=0;
 //画空心圆,鼠标按下时,当前鼠标位置为圆心
 canvas.onmousedown=function(e){
 e=window.event||e;
 sX=e.pageX-this.offsetLeft;
 sY=e.pageY-this.offsetTop;
 } 
 //画空心圆,鼠标抬起时,当前鼠标位置为外圆结束点
 canvas.onmouseup=function(e){
 e=window.event||e;
 var eX=e.pageX-this.offsetLeft;
 var eY=e.pageY-this.offsetTop;
 var dX=eX-sX
 var dY=eY-sY;
 //计算出半径
 var r = Math.sqrt(Math.pow(dX,2)+Math.pow(dY,2)); 
 can.beginPath();
 can.arc(sX,sY,r,0,360,false);
 can.closePath();
 can.stroke();
 }
 canvas.onmousemove=null;
 canvas.onmouseout=null;
}

好了,剩下的其他工具代码就不贴了,可以查看DEMO里的源代码。

下载本文
显示全文
专题