html5-Canvas绘图

简介:

在html5中我觉得最重要的就是引入了Canvas,使得我们可以在web中绘制各种图形。给人感觉单在这点上有点模糊我们web和桌面程序的感觉。在html5外web中也有基于xml的绘图如:VML、SVG。而Canvas为基于像素的绘图。Canvas是一个相当于画板的html节点,我们必须以js操作绘图。

如下:

<canvas id="myCanvas" width="600" height="300">你的浏览器还不支持哦</canvas>定义。

我们可以获取canvas对象为var c=document.getElementById("myCanvas");其应有js属性方法如下列举:

1:绘制渲染对象,c.getContext("2d"),获取2d绘图对象,无论我们调用多少次获取的对象都将是相同的对象。

2:绘制方法:

clecrRect(left,top,width,height)清除制定矩形区域,

fillRect(left,top,width,height)绘制矩形,并以fillStyle填充。

fillText(text,x,y)绘制文字;

strokeRect(left,top,width,height)绘制矩形,以strokeStyle绘制边界。

beginPath():开启路径的绘制,重置path为初始状态;

closePath():绘制路径path结束,它会绘制一个闭合的区间,添加一条起始位置到当前坐标的闭合曲线;

moveTo(x,y):设置绘图其实坐标。

lineTo(x,y);绘制从当前其实位置到x,y直线。

fill(),stroke(),clip():在完成绘制的最后的填充和边界轮廓,剪辑区域。

arc():绘制弧,圆心位置、起始弧度、终止弧度来指定圆弧的位置和大小;

rect():矩形路径;

drawImage(Imag img):绘制图片;

quadraticCurveTo():二次样条曲线路径,参数两个控制点;

bezierCurveTo():贝塞尔曲线,参数三个控制点;

createImageData,getImageData,putImageData:为Canvas中像素数据。ImageData为记录width、height、和数据 data,其中data为我们色素的记录为

         argb,所以数组大小长度为width*height*4,顺序分别为rgba。getImageData为获取矩形区域像素,而putImageData则为设置矩形区域像素;

… and so on!

3:坐标变换:

translate(x,y):平移变换,原点移动到坐标(x,y);

rotate(a):旋转变换,旋转a度角;

scale(x,y):伸缩变换;

save(),restore():提供和一个堆栈,保存和恢复绘图状态,save将当前绘图状态压入堆栈,restore出栈,恢复绘图状态;

… and so on!

好了,也晚了。附我的测试代码,:

 
  1. View Code   
  2.  
  3. <html>   
  4. <head>   
  5. </head>   
  6. <body>   
  7. <canvas id="myCanvas" width="600" height="300">你的浏览器还不支持哦</canvas>   
  8. <script type="text/javascript">   
  9.  
  10. var width,height,top,left;   
  11. width=height=100;   
  12. top=left=5;   
  13. var x=10;   
  14. var y=10;   
  15.  
  16. var c=document.getElementById("myCanvas");   
  17.  
  18. var maxwidth=c.width-5;   
  19. var maxheight=c.height-5;   
  20. var cxt=c.getContext("2d");   
  21. cxt.strokeStyle="#00f";   
  22. cxt.strokeRect(0,0,c.width,c.height);   
  23.  
  24. var img=new Image();   
  25. img.src="1.gif";   
  26. var MyInterval=null;   
  27. start();   
  28. function Refresh(){   
  29. cxt.clearRect(left,top,width,height);   
  30. if((left+x)>(maxwidth-width)||left+x<0){   
  31. x=-x;   
  32. }   
  33.  
  34. if((top+y)>(maxheight-height)||top+y<0){   
  35. y=-y;   
  36. }   
  37.  
  38. left=left+x;      
  39. top=top+y;   
  40. cxt.drawImage(img,left,top,width,height);   
  41. cxt.font="20pt 宋体";   
  42. cxt.fillText("破狼",left,top+25);   
  43.  
  44. }   
  45.  
  46. function start(){   
  47. if(MyInterval==null){   
  48. MyInterval=setInterval("Refresh()",100);   
  49. }   
  50. }   
  51.  
  52. function stop(){   
  53. if(MyInterval!=null){   
  54. clearInterval(MyInterval);   
  55. MyInterval=null;   
  56. }   
  57. }   
  58. function InRectangle(x,y,rectx,recty,rwidth,rheight){   
  59. return (x>=rectx&&x<=rectx+rwidth)&&(y>=recty&&y<=recty+rheight)   
  60. }   
  61. c.onmouseover=function(e){   
  62. if(InRectangle(e.clientX,e.clientY,left,top,width,height)){   
  63. stop();   
  64. }   
  65.  
  66. c.onmouseout=function(e){   
  67. start();   
  68. }   
  69.  
  70. c.onmousemove=function(e){   
  71. if(InRectangle(e.clientX,e.clientY,left,top,width,height)){   
  72. if(MyInterval!=null){   
  73. stop();   
  74. }   
  75. }else{   
  76. start();   
  77. }   
  78. }   
  79.  
  80. }   
  81. </script>   
  82. </body>   
  83. </html>  
  84. 复制代码 

参考火狐html文档:https://developer.mozilla.org/en/HTML/HTML5

     我的html5系列:1.html5声频audio和视频video

2.html5-Canvas绘图

3.html5之Canvas坐标变换应用-时钟实例

4.html5-web本地存储在html5中我觉得最重要的就是引入了Canvas,使得我们可以在web中绘制各种图形。给人感觉单在这点上有点模糊我们web和桌面程序的感觉。在html5外web中也有基于xml的绘图如:VML、SVG。而Canvas为基于像素的绘图。Canvas是一个相当于画板的html节点,我们必须以js操作绘图。

如下:

<canvas id="myCanvas" width="600" height="300">你的浏览器还不支持哦</canvas>定义。

我们可以获取canvas对象为var c=document.getElementById("myCanvas");其应有js属性方法如下列举:

1:绘制渲染对象,c.getContext("2d"),获取2d绘图对象,无论我们调用多少次获取的对象都将是相同的对象。

2:绘制方法:

clecrRect(left,top,width,height)清除制定矩形区域,

fillRect(left,top,width,height)绘制矩形,并以fillStyle填充。

fillText(text,x,y)绘制文字;

strokeRect(left,top,width,height)绘制矩形,以strokeStyle绘制边界。

beginPath():开启路径的绘制,重置path为初始状态;

closePath():绘制路径path结束,它会绘制一个闭合的区间,添加一条起始位置到当前坐标的闭合曲线;

moveTo(x,y):设置绘图其实坐标。

lineTo(x,y);绘制从当前其实位置到x,y直线。

fill(),stroke(),clip():在完成绘制的最后的填充和边界轮廓,剪辑区域。

arc():绘制弧,圆心位置、起始弧度、终止弧度来指定圆弧的位置和大小;

rect():矩形路径;

drawImage(Imag img):绘制图片;

quadraticCurveTo():二次样条曲线路径,参数两个控制点;

bezierCurveTo():贝塞尔曲线,参数三个控制点;

createImageData,getImageData,putImageData:为Canvas中像素数据。ImageData为记录width、height、和数据 data,其中data为我们色素的记录为

         argb,所以数组大小长度为width*height*4,顺序分别为rgba。getImageData为获取矩形区域像素,而putImageData则为设置矩形区域像素;

… and so on!

3:坐标变换:

translate(x,y):平移变换,原点移动到坐标(x,y);

rotate(a):旋转变换,旋转a度角;

scale(x,y):伸缩变换;

save(),restore():提供和一个堆栈,保存和恢复绘图状态,save将当前绘图状态压入堆栈,restore出栈,恢复绘图状态;

… and so on!

好了,也晚了。附我的测试代码,:

 
  1. View Code   
  2.  
  3. <html>   
  4. <head>   
  5. </head>   
  6. <body>   
  7. <canvas id="myCanvas" width="600" height="300">你的浏览器还不支持哦</canvas>   
  8. <script type="text/javascript">   
  9.  
  10. var width,height,top,left;   
  11. width=height=100;   
  12. top=left=5;   
  13. var x=10;   
  14. var y=10;   
  15.  
  16. var c=document.getElementById("myCanvas");   
  17.  
  18. var maxwidth=c.width-5;   
  19. var maxheight=c.height-5;   
  20. var cxt=c.getContext("2d");   
  21. cxt.strokeStyle="#00f";   
  22. cxt.strokeRect(0,0,c.width,c.height);   
  23.  
  24. var img=new Image();   
  25. img.src="1.gif";   
  26. var MyInterval=null;   
  27. start();   
  28. function Refresh(){   
  29. cxt.clearRect(left,top,width,height);   
  30. if((left+x)>(maxwidth-width)||left+x<0){   
  31. x=-x;   
  32. }   
  33.  
  34. if((top+y)>(maxheight-height)||top+y<0){   
  35. y=-y;   
  36. }   
  37.  
  38. left=left+x;      
  39. top=top+y;   
  40. cxt.drawImage(img,left,top,width,height);   
  41. cxt.font="20pt 宋体";   
  42. cxt.fillText("破狼",left,top+25);   
  43.  
  44. }   
  45.  
  46. function start(){   
  47. if(MyInterval==null){   
  48. MyInterval=setInterval("Refresh()",100);   
  49. }   
  50. }   
  51.  
  52. function stop(){   
  53. if(MyInterval!=null){   
  54. clearInterval(MyInterval);   
  55. MyInterval=null;   
  56. }   
  57. }   
  58. function InRectangle(x,y,rectx,recty,rwidth,rheight){   
  59. return (x>=rectx&&x<=rectx+rwidth)&&(y>=recty&&y<=recty+rheight)   
  60. }   
  61. c.onmouseover=function(e){   
  62. if(InRectangle(e.clientX,e.clientY,left,top,width,height)){   
  63. stop();   
  64. }   
  65.  
  66. c.onmouseout=function(e){   
  67. start();   
  68. }   
  69.  
  70. c.onmousemove=function(e){   
  71. if(InRectangle(e.clientX,e.clientY,left,top,width,height)){   
  72. if(MyInterval!=null){   
  73. stop();   
  74. }   
  75. }else{   
  76. start();   
  77. }   
  78. }   
  79.  
  80. }   
  81. </script>   
  82. </body>   
  83. </html>  
  84. 复制代码 

参考火狐html文档:https://developer.mozilla.org/en/HTML/HTML5

     我的html5系列:1.html5声频audio和视频video

2.html5-Canvas绘图

3.html5之Canvas坐标变换应用-时钟实例

4.html5-web本地存储





 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/835243,如需转载请自行联系原作者


相关文章
|
9月前
|
移动开发 前端开发 JavaScript
Html5 Canvas绘图实例
Html5 Canvas绘图实例
63 0
|
移动开发 前端开发 JavaScript
HTML的笔记及展示(3)(绘图和多媒体支持相关)
HTML的笔记及展示(3)(绘图和多媒体支持相关)
63 0
|
前端开发
html:canvas画布绘图简单入门-刮刮乐-4
html:canvas画布绘图简单入门-刮刮乐-4
html:canvas画布绘图简单入门-刮刮乐-4
|
前端开发
html:canvas画布绘图简单入门-绘制时钟-3
html:canvas画布绘图简单入门-绘制时钟-3
100 0
html:canvas画布绘图简单入门-绘制时钟-3
|
编解码 前端开发
html:canvas画布绘图简单入门-2
html:canvas画布绘图简单入门-2
html:canvas画布绘图简单入门-2
|
前端开发
html:canvas画布绘图简单入门-1
html:canvas画布绘图简单入门-1
html:canvas画布绘图简单入门-1
|
XML 移动开发 编解码
HTML5绘图方式Canvas和SVG的区别
HTML5绘图方式Canvas和SVG的区别
416 0
|
Web App开发 移动开发 前端开发
|
Web App开发 移动开发 前端开发