Canvas简介
Canvas元素是HTML5的一部分,允許指令碼語言動態渲染點陣圖像。Canvas是由HTML代碼配合高度和寬度屬性而定義出的可繪製區域。JavaScript代碼可以訪問該區域,類似於其他通用的二維API,通過一套完整的繪圖函數來動態生成圖形。一些可能的用途,包括使用Canvas構造圖形,動畫,遊戲和圖片。[来自维基百科)]
Canvas的浏览器支持情况:
| Internet Explorer | Firefox | Safari | Chrome | Opera | iOS Safari | Opera Mobile | Android Browser |
|---|---|---|---|---|---|---|---|
| 5.1 | 3.2 | 12.0 | 10.6 | 10.0 | 2.1 | ||
| 6.2 | 4.0 | 13.0 | 11.0 | 3.2 | 11.0 | 2.2 | |
| 7.1 | 5.0 | 14.0 | 11.1 | 4.0 | 11.1 | 2.3,3.0 | |
| 9.0 | 8.0 | 5.1 | 15.0 | 11.5 | 4.2-4.3 | 11.5 | 4.0 |
对于不支持Canvas标签的浏览器,可以在其标签增加替换内容,比如一句话,或者一张图片。</canvas>标签不能省略,如果结束标签不存在,<canvas>标签后的其余部分都会被认为是替换内容,导致其余部分无法正常显示。1
2
3<canvas id="canvas-1" width="200" height="200">
<p>浏览器不支持canvas标签</p>
</canvas>
同时也可以依靠脚本来判定浏览器是否支持 <canvas>标签。1
2
3
4
5
6
7var canvas1 = document.getElementById('canvas-1');
if (canvas1.getContext){
var ctx1 = canvas1.getContext('2d');
...
} else {
...
}
Canvas属性
canvas标签只有两个属性:width和height。渲染canvas时,如果不设置固定的宽高,canvas会默认设置宽度为300px,高度为150px。虽然也可以使用css定义canvas的宽高,但是在绘制图形时可能会存在图形拉伸。比如你绘制的是一个正方形,由于通过css设置了宽高,但css的尺寸跟canvas初始画布的比例不一致,就会出现形状拉伸现象。下面用一个例子来看一下。
See the Pen rdeRjo by LCINA (@LCINA) on CodePen.
上面的例子包括了四种情况,分别是
1.不设置宽高[默认300x150]
2.设置canvas宽高
3.设置canvas初始化宽高+css设置同比例宽高
4.默认canvas宽高300x150+css设置宽高[200x200]
前两种情况没有什么特别,后两种情况,唯一的区别就是两者宽高比例是否一致,可以发现第三种情况canvas宽高和css设置的宽高比例一致,所以绘制的图形没有出现变形扭曲现象。而最后一种情况,默认canvas的宽高为300x150,与设置的css宽高200x200不一致,所以画布绘制的图形出现了变形扭曲的现象。综上,如果要用css来设置canvas的尺寸,需要跟canvas初始尺寸比例保持一致。
渲染上下文
<canvas>标签创建了一块固定大小的画布,公开了一个或多个渲染上下文,可以用来绘制和处理要展示的内容。如果要画布上绘制内容,就必须拿到canvas上下文,可以根据拿到的上下文,绘制各种图形等。1
2var canvas1 = document.getElementById('canvas-1');
var ctx1 = canvas1.getContext('2d');
获取到ctx1这个上下文后,就可以调用提供的api绘制图形,如fillRect等。
本文主要介绍了canvas比较基础的用法,下一章会介绍如何通过canvas创建的上下文绘制各种图形。
参考资料:
Canvas的基本用法