canvas1
Canvas 是什么?
Canvas
中文名叫 “画布”,是HTML5
新增的一个标签。Canvas
允许开发者通过JS
在这个标签上绘制各种图案。Canvas
拥有多种绘制路径、矩形、圆形、字符以及图片的方法。Canvas
在某些情况下可以 “代替” 图片。Canvas
可用于动画、游戏、数据可视化、图片编辑器、实时视频处理等领域。
Canvas 和 SVG 的区别
Canvas | SVG |
---|---|
用JS动态生成元素(一个HTML元素) | 用XML描述元素(类似HTML元素那样,可用多个元素来描述一个图形) |
位图(受屏幕分辨率影响) | 矢量图(不受屏幕分辨率影响) |
不支持事件 | 支持事件 |
数据发生变化需要重绘 | 不需要重绘 |
就上面的描述而言可能有点难懂,可以打开 AntV
旗下的图形编辑引擎做对比。 G6 是使用 canvas
开发的, X6 是使用 svg
开发的。
建议:如果要展示的数据量比较大,比如一条数据就是一个元素节点,那使用 canvas
会比较合适;如果用户操作的交互比较多,而且对清晰度有要求(矢量图),那么使用 svg
会比较合适。
起步
本例会画一条直线。
画条直线
- 在
HTML
中创建canvas
元素 - 通过
js
获取canvas
标签 - 从
canvas
标签中获取到绘图工具 - 通过绘图工具,在
canvas
标签上绘制图形
1<!-- 1、创建 canvas 元素 -->
2<canvas
3 id="c"
4 width="300"
5 height="200"
6 style="border: 1px solid #ccc;"
7></canvas>
8
9<script>
10 // 2、获取 canvas 对象
11 const cnv = document.getElementById('c')
12
13 // 3、获取 canvas 上下文环境对象
14 const cxt = cnv.getContext('2d')
15
16 // 4、绘制图形
17 cxt.moveTo(100, 100) // 起点坐标 (x, y)
18 cxt.lineTo(200, 100) // 终点坐标 (x, y)
19 cxt.stroke() // 将起点和终点连接起来
20</script>
moveTo
、 lineTo
和 stroke
方法暂时可以不用管,它们的作用是绘制图形,这些方法在后面会讲到~
注意点
1、默认宽高
canvas
有 默认的 宽度(300px) 和 高度(150px)
如果不在 canvas
上设置宽高,那 canvas
元素的默认宽度是300px,默认高度是150px。
2、设置 canvas 宽高
canvas
元素提供了 width
和 height
两个属性,可设置它的宽高。
需要注意的是,这两个属性只需传入数值,不需要传入单位(比如 px
等)。
1<canvas width="600" height="400"></canvas>
3、不能通过 CSS 设置画布的宽高
使用 css
设置 canvas
的宽高,会出现 内容被拉伸 的后果!!
1<style>
2 #c {
3 width: 400px;
4 height: 400px;
5 border: 1px solid #ccc;
6 }
7</style>
8
9<canvas id="c"></canvas>
10
11<script>
12 // 1、获取canvas对象
13 const cnv = document.getElementById('c')
14
15 // 2、获取canvas上下文环境对象
16 const cxt = cnv.getContext('2d')
17
18 // 3、绘制图形
19 cxt.moveTo(100, 100) // 起点
20 cxt.lineTo(200, 100) // 终点
21 cxt.stroke() // 将起点和终点连接起来
22
23 console.log(cnv.width) // 获取 canvas 的宽度,输出:300
24 console.log(cnv.height) // 获取 canvas 的高度,输出:150
25</script>
canvas
的默认宽度是300px,默认高度是150px。
- 如果使用
css
修改canvas
的宽高(比如本例变成 400px * 400px),那宽度就由 300px 拉伸到 400px,高度由 150px 拉伸到 400px。 - 使用
js
获取canvas
的宽高,此时返回的是canvas
的默认值。
最后出现的效果如上图所示。
4、线条默认宽度和颜色
线条的默认宽度是 1px
,默认颜色是黑色。
但由于默认情况下 canvas
会将线条的中心点和像素的底部对齐,所以会导致显示效果是 2px
和非纯黑色问题。
5、IE兼容性高
暂时只有 IE 9
以上才支持 canvas
。
如需兼容 IE 7 和 8
,可以使用 ExplorerCanvas。但即使是使用了 ExplorerCanvas
仍然会有所限制,比如无法使用 fillText()
方法等。