首先,从它们的功能上来讲,canvas可以看做是一个画布。,其绘制出来的图形为标量图,因此,可以在canvas中引入jpg或png这类格式的图片,在实际开发中,大型的网络游戏都是用canvas画布做出来的,并且canvas的技术现在已经相当的成熟。另外,我们喜欢用canvas来做一些统计用的图表,如柱状图曲线图或饼状图等。而svg,所绘制的图形为矢量图,所以其用法上受到了限制。因为只能绘制矢量图,所以svg中不能引入普通的图片,因为矢量图的不会失真的效果,在项目中我们会用来做一些动态的小图标。但是由于其本质为矢量图,可以被无限放大而不会失真,这很适合被用来做地图,而百度地图就是用svg技术做出来的。
另外从技术发面来讲canvas里面绘制的图形不能被引擎抓取,如我们要让canvas里面的一个图片跟随鼠标事件:canvas.οnmοuseοver=function(){}。而svg里面的图形可以被引擎抓取,支持事件的绑定。另外canvas中我们绘制图形通常是通过javascript来实现,svg更多的是通过标签来来实现,如在svg中绘制正矩形形就要用,这里我们不能用属性style="width:XXX;height:XXX;"来定义。我再来介绍一个svg的js库:TWO.JS。其中包含two.js和three.js前者用于绘制二维图形,后者用于绘制三维图形。TWO.JS可以支持三种格式,svg(默认)、canvas、和WEBGL。当然也可以在普通div中引入。
html5-新特性--绘图canvas---矩形
(1)绘制空心矩形(描边矩形)
ctx.strokeRect(x,y,w,h);
x,y 空心矩形左上角位置
w,h 空心矩形宽度和高度
(2)绘制实心矩形(填充矩形)
ctx.fillRect(x,y,w,h);
(3)设置实心图形样式 ctx.fillStyle = "#f00"; ctx.fillRect(0,0,100,80); 生效 ctx.strokeRect(100,100,100,80) 不生效
(4)设置空心图形样式
ctx.strokeStyle = "#fff";
(5)清空矩形范围内所有元素 ctx.clearRect(x,y,w,h); #清空画布所有元素 ctx.clearRect(0,0,500,400);