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里的源代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM