HTML <canvas> 标签


实例

动态绘制一个红色矩形,并将其显示在 canvas 元素中:

<canvas id="myCanvas">
您的浏览器不支持 canvas 标签。
</canvas>

<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#FF0000";
ctx.fillRect(0, 0, 80, 80);
</script>
亲自试一试 »

下面有更多实例。


定义和用法

<canvas> 标签用于通过脚本(通常是 JavaScript)动态绘制图形。

<canvas> 标签是透明的,并且只是图形的容器,您必须使用脚本来实际绘制图形。

<canvas> 元素中的任何文本都将在禁用 JavaScript 的浏览器和不支持 <canvas> 的浏览器中显示。


提示和注释

提示: 在我们的 HTML Canvas 画布教程 中了解有关 Canvas 元素的更多信息。

提示: 有关所有属性和方法的完整参考,请访问我们的 HTML Canvas 画布参考手册


浏览器支持

表中的数字指完全支持该元素的第一个浏览器版本。

元素
<canvas> 4.0 9.0 2.0 3.1 9.0

属性

属性 描述
height pixels 设置 canvas 的高度。默认值是 150
width pixels 设置 canvas 的宽度。默认值是 300

全局属性

<canvas> 标签支持 HTML 中的全局属性


事件属性

<canvas> 标签支持 HTML 中的事件属性


<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 发起)来构建兼容性的画布。 参见:http://excanvas.sourceforge.net/

<canvas> 的标准化的努力由一个 Web 浏览器厂商的非正式协会在推进,目前 <canvas> 已经成为 HTML 5 草案中一个正式的标签。 参见:http://www.whatwg.org/specs/web-apps/current-work/

<canvas> 标签和 SVG 以及 VML 之间的差异

<canvas> 标签和 SVG 以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图。

这两种方式在功能上是等同的,任何一种都可以用另一种来模拟。从表面上看,它们很不相同,可是,每一种都有强项和弱点。例如,SVG 绘图很容易编辑,只要从其描述中移除元素就行。

要从同一图形的一个 <canvas> 标签中移除元素,往往需要擦掉绘图重新绘制它。

如何使用 <canvas> 标签绘图

大多数 Canvas 绘图 API 都没有定义在 <canvas> 元素本身上,而是定义在通过画布的 getContext() 方法获得的一个"绘图环境"对象上。

Canvas API 也使用了路径的表示法。但是,路径由一系列的方法调用来定义,而不是描述为字母和数字的字符串,比如调用 beginPath() 和 arc() 方法。

一旦定义了路径,其他的方法,如 fill(),都是对此路径操作。绘图环境的各种属性,比如 fillStyle,说明了这些操作如何使用。

注释:Canvas API 非常紧凑的一个原因上它没有对绘制文本提供任何支持。要把文本加入到一个 <canvas> 图形,必须要么自己绘制它再用位图图像合并它,或者在 <canvas> 上方使用 CSS 定位来覆盖 HTML 文本。


更多实例

实例

另一个 canvas 实例:

<canvas id="myCanvas">
您的浏览器不支持 canvas 标签。
</canvas>

<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(20, 20, 75, 50);
//Turn transparency on
ctx.globalAlpha = 0.2;
ctx.fillStyle = "blue";
ctx.fillRect(50, 50, 75, 50);
ctx.fillStyle = "green";
ctx.fillRect(80, 80, 75, 50);
</script>
亲自试一试 »

默认CSS设置

大多数浏览器将使用以下默认值显示 <canvas> 元素:

实例

canvas {
  height: 150px;
  width: 300px;
}
亲自试一试 »