从0到1:HTML5 Canvas动画开发
上QQ阅读APP看书,第一时间看更新

1.2 Canvas元素

HTML5 Canvas,简单来说,就是一门使用JavaScript来操作Canvas元素的技术。使用Canvas元素来绘制图形,需要以下3步。

① 获取canvas对象。

② 获取上下文环境对象context。

③ 开始绘制图形。

举例

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

<script type="text/javascript">

window.onload = function () {

//1、获取canvas对象

var cnv = document.getElementById("canvas");

//2、获取上下文环境对象context

var cxt = cnv.getContext("2d");

//3、开始绘制图形

cxt.moveTo(50, 100);

cxt.lineTo(150, 50);

cxt.stroke();

}

</script>

</head>

<body>

<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>

</body>

</html>

预览效果如图1-7所示。

图1-7 画直线

分析

在Canvas中,我们使用document.getElementById()方法来获取Canvas对象(这是一个DOM对象),然后使用Canvas对象的getContext("2d")方法获取上下文环境对象context,最后使用context对象的属性和方法来绘制各种图形。

1.2.1 Canvas元素简介

Canvas是一个行内块元素(即inline-block),我们一般需要指定其3个属性:id、width和height。width和height分别用于定义Canvas元素的宽度和高度。默认情况下,Canvas元素的宽度为300px(Pixel,像素),高度为150px。

对于Canvas的宽度和高度,我们有两种方法来定义:一是在HTML属性中定义,二是在CSS样式中定义。但是在实际开发中,我们一定不要在CSS样式中定义,而应该在HTML属性中定义。为什么呢?我们先来看一个例子。

举例

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

<style type="text/css">

canvas

{

width:200px;

height:150px;

}

</style>

<script type="text/javascript">

window.onload = function () {

var cnv = document.getElementById("canvas");

var str = "canvas的宽度为:" + cnv.width + ",高度为:" + cnv.height;

alert(str);

}

</script>

</head>

<body>

<canvas id="canvas" style="border:1px dashed gray;"></canvas>

</body>

</html>

预览效果如图1-8所示。

图1-8 无法获取正确的宽度和高度

分析

从这个例子我们可以看出:如果在CSS样式中定义,Canvas元素的宽度和高度是默认值,而不是所定义的宽度和高度,这样我们就无法获取Canvas元素正确的宽度和高度。获取Canvas元素实际的宽度和高度是Canvas开发中最常用的操作,因此对于Canvas元素的宽度和高度,我们一定要在HTML属性中定义,而不是在CSS样式中定义。

1.2.2 Canvas对象

在Canvas中,我们使用document.getElementById()来获取Canvas对象。Canvas对象常用的属性和方法如表1-1和表1-2所示。

表1-1 Canvas对象的常用属性

表1-2 Canvas对象的常用方法

也就是说,我们可以使用cnv.width和cnv.height分别获取Canvas对象的宽度和高度,可以使用cnv.getContext("2d")来获取Canvas 2D上下文环境对象,也可以使用toDataURL()来获取Canvas对象产生的位图的字符串。在这里,cnv指的是Canvas对象。

对于toDataURL()方法,小伙伴们暂时不需要深入了解,在后面的章节中会给大家详细介绍。这里我们要认真学习getContext("2d")方法。在Canvas中,我们使用getContext("2d")来获取Canvas 2D上下文环境对象,这个对象又被称为context对象。后面章节接触的所有图形的绘制,使用的都是context对象的属性和方法,我们要特别清楚这一点。当然,现在不理解没关系,学到后面再回过头来看看这段话就懂了。

举例

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

<script type="text/javascript">

window.onload = function () {

var cnv = document.getElementById("canvas");

var str = "Canvas的宽度为:" + cnv.width + ",高度为:" + cnv.height;

alert(str);

}

</script>

</head>

<body>

<canvas id="canvas" width="200" height="160" style="border:1px dashed gray"></canvas>

</body>

</html>

预览效果如图1-9所示。

图1-9 获取正确的宽度和高度

特别要注意一点:在本书中所有图形的绘制,使用的都是context对象(上下文环境对象)的属性和方法。

【解惑】

1.我们可以使用getContext("2d")来实现2D绘图,那是不是意味着可以使用getContext ("3d")来实现3D绘图呢?

HTML5 Canvas暂时只提供2D绘图API,3D绘图可以使用HTML5中的WebGL实现。不过3D绘图一直以来都是HTML5中的“黑科技”,技术要求高并且难度大。等学完了这本书,有兴趣的小伙伴可以关注绿叶学习网的WebGL教程。

2.对于IE浏览器来说,暂时只有IE9以上版本支持HTML5 Canvas,那怎么处理IE7和IE8的兼容性问题呢?

对于IE7和IE8,我们可以借助“explorercanvas”这个扩展来解决。该扩展下载地址为:https://github.com/arv/explorercanvas。

我们只需要在页面中像引入外部JavaScript文件那样引入“excanvas.js”就可以了,代码如下。

<!--[if IE]>

<script src="excanvas.js"></script>

<![end if]-->

不过要跟大家说明一下,低版本的IE浏览器即使引入了“excanvas.js”来使用Canvas,在功能上也会有很多限制,如无法使用fillText()方法等。

3.除了这本书,还有哪些值得推荐的Canvas教程?

建议小伙伴们多看看W3C官方网站的Canvas开发文档,因为这是比较权威的参考资料。W3C官网地址:www.w3.org/TR/2dcontext/。