好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

【HTML5】Canvas基础知识讲解

HTML5规范引进了很多新特性,其中最令人期待的之一就是Canvas元素。HTML5 Canvas提供了通过JavaScript绘制图形的方法,此方法使用简单但功能强大。每一个Canvas元素都有一个“上下文(context)” (想象成绘图板上的一页),在其中可以绘制任意图形。浏览器支持多个Canvas上下文,并通过不同的API提供图形绘制功能。
大部分的浏览器都支持2D Canvas上下文——包括Opera,Firefox,Konqueror和Safari。而且某些版本的Opera还支持3D Canvas,Firefox也可以通过插件形式支持 3D Canvas。
本文介绍主要介绍2D Canvas基础以及如何使用基本Canvas函数,如线条、形状、图像和文字等。为了理解此文章,你最好了解JavaScript基础知识。
下面开始我们的讲解:
canvas基础
创建Canvas的方法很简单,只需要在HTML页面中添加
为了能在JavaScript中引用Canvas,最好给它设置ID ;也需要给Canvas设定高度和宽度。
要在Canvas画布中绘制图形需要使用JavaScript。首先通过getElementById函数找到Canvas元素,然后初始化上下文,之后可以使用上下文API绘制各种图形。下面的脚本可以在Canvas中绘制一个矩形:

var elem = document.getElementById('myCanvas');
if (elem && elem.getContext) {
  var context = elem.getContext('2d');
  if (context) {
    context.fillRect(0, 0, 150, 100);
  }
} 
context.fillStyle   = '#00f';
context.strokeStyle = '#f00';
context.lineWidth   = 4;
context.fillRect  (0,   0, 150, 50);
context.strokeRect(0,  60, 150, 50);
context.clearRect (30, 25,  90, 60);
context.strokeRect(30, 25,  90, 60); 

context.fillStyle   = '#00f';
context.strokeStyle = '#f00';
context.lineWidth   = 4;
context.beginPath();
context.moveTo(10, 10);
context.lineTo(100, 10);
context.lineTo(10, 100);
context.lineTo(10, 10);
context.fill();
context.stroke();
context.closePath(); 
context.drawImage(img_elem, dx, dy);
context.drawImage(img_elem, dx, dy, dw, dh);
context.drawImage(img_elem, sx, sy, sw, sh, dx, dy, dw, dh); 
var imgd = context.createImageData(50,50);
var pix = imgd.data;
for (var i = 0; n = pix.length, i < n; i += 4) {
  pix[i  ] = 255;
  pix[i+3] = 127;
}
context.putImageData(imgd, 0,0);
 


注意: 不是所有浏览器都实现了createImageData。在支持的浏览器中,需要通过getImageData方法获取ImageData对象。
通过ImageData可以完成很多功能。如可以实现图像滤镜,或可以实现数学可视化 (如分形和其他特效)。来看一个实例:

var imgd = context.getImageData(x, y width, height);
var pix = imgd.data;
for (var i = 0, n = pix.length; i < n; i += 4) {
  pix[i  ] = 255 - pix[i  ];
  pix[i+1] = 255 - pix[i+1];
  pix[i+2] = 255 - pix[i+2];
}
context.putImageData(imgd,x, y);
 


可以把上面代码放置在文档head部分中,或者放在外部JavaScript文件中。
文字


虽然最近的WebKit版本和Firefox 3.1 nightly build才开始支持Text API,为了保证文章完整性我决定仍在这里介绍文字API。
context对象可以设置以下text属性:
font:文字字体,同CSS font-family属性;
textAlign:文字水平对齐方式。可取属性值: start,end,left,right,center。默认值:start;
textBaseline:文字竖直对齐方式。可取属性值:top,hanging,middle,alphabetic,ideographic,bottom。默认值:alphabetic。
有两个方法可以绘制文字:fillText和strokeText。第一个绘制带fillStyle填充的文字,后者绘制只有strokeStyle边框的文字。两者的参数相同:要绘制的文字和文字的位置(x,y)坐标。还有一个可选选项——最大宽度。如果需要的话,浏览器会缩减文字以让它适应指定宽度。
文字对齐属性影响文字与设置的(x,y)坐标的相对位置。

ontext.fillStyle    = '#00f';
context.font         = 'italic 30px sans-serif';
context.textBaseline = 'top';
context.fillText  ('Hello world!', 0, 0);
context.font         = 'bold 30px sans-serif';
context.strokeText('Hello world!', 0, 50);
 


可以把上面代码放置在文档head部分中,或者放在外部JavaScript文件中。
阴影


目前只有Konqueror和Firefox 3.1 nightly build支持Shadows API。API的属性为:shadowColor:阴影颜色。其值和CSS颜色值一致。
shadowBlur:设置阴影模糊程度。此值越大,阴影越模糊。其效果和Photoshop的高斯模糊滤镜相同。
shadowOffsetX和shadowOffsetY:阴影的x和y偏移量,单位是像素。

context.shadowOffsetX = 5;
context.shadowOffsetY = 5;
context.shadowBlur    = 4;
context.shadowColor   = 'rgba(255, 0, 0, 0.5)';
context.fillStyle     = '#00f';
context.fillRect(20, 20, 150, 100);
 
var gradient1 = context.createLinearGradient(sx,sy,dx,dy);
gradient1.addColorStop(0,   '#f00');
gradient1.addColorStop(0.5, '#ff0');
gradient1.addColorStop(1,   '#00f');
var gradient2 = context.createRadialGradient(sx,sy,sr,dx,dy, dr);
 


可以把上面代码放置在文档head部分中,或者放在外部JavaScript文件中。
小结


Canvas是HTML5最让人期待的特性之一,目前已获得大部分Web浏览器支持Canvas可以帮助创建游戏、增强图形用户界面。2D context API提供大量图形绘制功能——我希望通过本文你了解了Canvas使用,并且你有兴趣了解更多!

以上就是【HTML5】Canvas基础知识讲解的内容,更多相关内容请关注PHP中文网(HdhCmsTestgxlcms测试数据)!

查看更多关于【HTML5】Canvas基础知识讲解的详细内容...

  阅读:36次