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!

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

ExpandedBlockStart.gif View Code
< 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){ 
start(); 


c.onmousemove
= function (e){ 
if (InRectangle(e.clientX,e.clientY,left,top,width,height)){ 
if (MyInterval != null ){ 
stop(); 

}
else
start(); 




< / script> 
< / body> 
< / html>

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

 

     我的html5系列:

    1. html5声频audio和视频video
    2. html5-Canvas绘图
    3. html5之Canvas坐标变换应用-时钟实例
    4. html5-web本地存储

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值