什么是canvas
<canvas>
是一个可以使用脚本(通常为JavaScript)来绘制图形的 HTML 元素。
Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。
没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Flash进行交互。有了Canvas,我们就再也不需要Flash了,直接使用JavaScript完成绘制。
开始使用canvas元素
canvas元素非常简单, 这是指它所有的功能都体现在一个javascript对象上。因此该元素只有两个属性
元素 | canvas |
---|---|
元素类型 | 短语/流 |
允许具有的父元素 | 任何能够包含短语和流的元素 |
局部属性 | height width |
是否为HTML5新增 | 是 |
内容 | 短语或流内容 |
标签用法 | 开始和结束标签 |
canvas元素里的内容会在浏览器不支持此元素时作为备用显示
使用带有基本内容的canavas元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
canvas {
border: 2px solid #ccc;
margin: 10px auto;
}
</style>
</head>
<body>
<canvas id="test-canvas" width="500" height="200">
你的浏览器不支持canvas
</canvas>
</body>
</html>
效果如图
现在只是设置了最基本的样式
获取画布上下文
<canvas>
元素创造了一个固定大小的画布,它公开了一个或多个渲染上下文,其可以用来绘制和处理要展示的内容。我们将会将注意力放在2D渲染上下文中。
canvas起初是空白的。为了展示,首先脚本需要找到渲染上下文,然后在它的上面绘制。<canvas>
元素有一个叫做 getContext()
的方法,这个方法是用来
获得渲染上下文和它的绘画功能。
var canvas = document.getElementById('test-canvas');
var ctx = canvas.getContext('2d');
绘制矩形
成员 | 说明 | 返回 |
---|---|---|
clearRect(x,y,w,h) | 清除指定的矩形 | void |
fillRect(x,y,w,h) | 绘制一个实心矩形 | void |
storkeRect(x,y,w,h) | 绘制一个空心矩形 | void |
所有的三个方法都需要四个参数, 前两个是从canvas元素左上角算起的偏移量,w和h指定了绘制的宽度和高度。
let canvas = document.getElementById('text-canvas');
let ctx = canvas.getContext('2d');
ctx.fillRect(10, 10, 50, 50);
设置填充
let canvas = document.getElementById('text-canvas');
let ctx = canvas.getContext('2d');
ctx.fillStyle = 'blue';
ctx.fillRect(10, 10, 50, 50);
可以看出,使用canvas绘制矩形可以分为这么几步:
- 获取canvas元素
- 获取上下文
- 调用上下文提供的API,设置填充颜色,设置坐标,绘制图形
canvas坐标系
Canvas的坐标以左上角为原点,水平向右为X轴,垂直向下为Y轴,以像素为单位,所以每个点都是非负整数。
WebGL坐标系
使用webgl绘图虽然也是在canvas中,但是使用的坐标系并不是canvas坐标系,而是webgl自己的坐标系,webgl坐标系的原点在canvas的中心,x轴正向水平向右,y轴正向垂直向上,z轴正向是从屏幕向观察者方向:
总结
webgl使用canvas ,js,着色器语言绘制图形
webgl坐标系和canvas坐标系不同,原点在canvas中心,不是左上角,且y轴正方向是水平向上,不是向下,和高中数学中用的坐标系一样,笛卡尔坐标系。