天天看点

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出栈,恢复绘图状态;

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

html5-Canvas绘图
html5-Canvas绘图

<html> 

<head> 

</head> 

<body> 

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

<script type="text/javascript"> 

var width,height,top,left; 

width=height=100; 

top=left=5; 

var x=10; 

var y=10; 

var c=document.getelementbyid("mycanvas"); 

var maxwidth=c.width-5; 

var maxheight=c.height-5; 

var cxt=c.getcontext("2d"); 

cxt.strokestyle="#00f"; 

cxt.strokerect(0,0,c.width,c.height); 

var img=new image(); 

img.src="1.gif"; 

var myinterval=null; 

start(); 

function refresh(){ 

cxt.clearrect(left,top,width,height); 

if((left+x)>(maxwidth-width)||left+x<0){ 

x=-x; 

if((top+y)>(maxheight-height)||top+y<0){ 

y=-y; 

left=left+x;    

top=top+y; 

cxt.drawimage(img,left,top,width,height); 

cxt.font="20pt 宋体"; 

cxt.filltext("破狼",left,top+25); 

function start(){ 

if(myinterval==null){ 

myinterval=setinterval("refresh()",100); 

function stop(){ 

if(myinterval!=null){ 

clearinterval(myinterval); 

myinterval=null; 

function inrectangle(x,y,rectx,recty,rwidth,rheight){ 

return (x>=rectx&&x<=rectx+rwidth)&&(y>=recty&&y<=recty+rheight) 

c.onmouseover=function(e){ 

if(inrectangle(e.clientx,e.clienty,left,top,width,height)){ 

stop(); 

c.onmouseout=function(e){ 

c.onmousemove=function(e){ 

}else{ 

</script> 

</body> 

</html>

html5-Canvas绘图

     我的html5系列:

<a href="http://www.cnblogs.com/whitewolf/archive/2011/02/28/1967456.html">html5声频audio和视频video</a>

<a href="http://www.cnblogs.com/whitewolf/archive/2011/03/02/1968512.html">html5-canvas绘图</a>

<a href="http://www.cnblogs.com/whitewolf/archive/2011/03/02/1969398.html" target="_blank">html5之canvas坐标变换应用-时钟实例</a>

<a href="http://www.cnblogs.com/whitewolf/archive/2011/03/04/1970457.html" target="_blank">html5-web本地存储</a>

继续阅读