本节书摘来自华章计算机《HTML5 Canvas游戏开发实战》一书中的第1章,第1.2节,作者:张路斌著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.2 Canvas简介
Canvas 元素是HTML5的新元素之一,用于在网页上绘制图形,相当于在HTML中嵌入了一张画布,这样就可以直接在HTML上进行图形操作了,所以它具有极大的应用价值。Canvas 元素本身是没有绘图能力的,它需要借助JavaScript来实现绘图功能。
1.2.1 Canvas标签的历史
Canvas这个 HTML 元素是为客户端矢量图形而设计的。它自己没有行为,只是把一个绘图 API 展现给了客户端 JavaScript,以使脚本能够把想绘制的东西都绘制到一块画布上。
< canvas >标记由 Apple 在 Safari 1.3 Web 浏览器中引入。对 HTML进行这一扩展的原因在于,希望HTML 在 Safari 中的绘图能力也能为 Mac OS X 桌面的 Dashboard 组件所使用,并且 Apple 希望有一种方式在 Dashboard 中支持脚本化的图形。
Firefox 1.5 和 Opera 9 都跟随了 Safari 的引领,这两个浏览器都支持< canvas>标记。
可以在 IE 中使用< canvas>标记,并在 IE 的 VML 支持基础上用开源的 JavaScript 代码(由 Google 发起)来构建具有兼容性的画布。
< canvas>的标准化工作正在由一个 Web 浏览器厂商的非正式协会进行推动。目前< canvas>已经成为 HTML5 草案中一个正式的标签。
1.2.2 Canvas的定义和用法
使用Canvas标签,只需要向HTML5里添加Canvas元素即可,代码如下:
<canvas id="myCanvas" width="200" height="100"></canvas>
1.2.3 如何使用Canvas来绘图
前面已经提到,Canvas 元素本身是没有绘图能力的,所有的绘制工作必须在 JavaScript 内部完成。下面来看看如何使用Canvas来绘图。
代码清单1-7所示代码可以实现绘制一个矩形。
代码清单 1-7
onload = function() {
draw();
};
function draw() {
/* 使用 id 来寻找 Canvas 元素 */
var canvas = document.getElementById('canvassample');
/* 验证Canvas元素是否存在,以及浏览器是否支持Canvas元素*/
if ( ! canvas || ! canvas.getContext ) return false; /* 创建 context 对象 */
var ctx = canvas.getContext('2d');
/*画一个红色矩形*/
cxt.fillStyle="#FF0000";
cxt.fillRect(0,0,150,75);
}
下面来分析一下以上代码。要使用Canvas元素,首先要根据id或name,将Canvas对象取出来,上面的代码使用的是getElementById方法,如果给Canvas标签加入了name属性,那么也可以使用getElementByTagName来获取Canvas对象。
另外,要使用Canvas元素,必须先判断这个元素是否存在及用户所使用的浏览器是否支持此元素。如果无法使用Canvas元素,那么下面做的所有事情都是无意义的。
上面的代码在使用getContext方法时,传递了一个“2d”参数,这就可以得到二维的context对象以实现二维图形的描画。试想一下,如果将来Canvas可以描画三维图形,或许也可以使用“3d”参数。但是目前还只能使用“2d”作为参数。
在上面的例子中,采用fillStyle方法将画笔颜色设置为红色。另外,用fillRect方法规定了图形的形状、位置和尺寸。更多Canvas的使用方法,将会在第2章之后进行详细介绍。
1.2.4 Canvas的限制
使用Canvas可拥有多种绘制路径、矩形、圆形、字符及添加图像的方法。但是绘制的图形是静止的,如果要让所画的图形动起来,则需要画出每一帧的图形,然后再连接起来。这些都会在后面的章节做详细的介绍。
虽然Canvas可以对图形进行一系列操作,但是效率和普及性都存在一定的问题,对于一些相对复杂的图形和动画等,目前来看,还是Flash更胜一筹。
另外,Canvas是HTML5的新属性,在使用时需要考虑用户的浏览器和使用环境。
Canvas目前只是一张二维画布,如果要想实现三维效果,需要借助第三方类库,如three.js或者Papervision3D等。