HTML5简易在线画图工具

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

简易在线画图工具

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

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

自由画笔的思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/******* 自由画笔 *******/
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):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/******* 文字 *******/
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)就可以了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/******* 直线 *******/
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 ;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/******* 空心圆圈 *******/
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里的源代码。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值