# 动画与 canvas 图形
使用 requestAnimationFrame
理解 <canvas> 元素
・绘制出简单的 2dtupian
- 使用 webGL 绘制 3d 图形
# requestAnimationsFrame 的使用
1 | function updateProgress(){ |
因为 requestAnimationsFrame()只会调用一次传入的函数,所以每次更新用户界面时需要再手动调用一次,同样,也需要控制动画何时停止。结果就会得到非常平滑的动画。
requestAnimationsFrame () 可以接收一个参数,此参数是一个 DOMHighResTimestamp 的实例(比如 performance.now () 返回的值),表示下次重绘的时间。这一点很重要:requestAnimationsFrame () 实际上把重绘任务安排在了未来一个已知的时间点上,而且通过这个参数告诉了开发者。基于这个参数,就可以更好的决定如何调优动画了。
# cancelAnimationFrame
requestsAnimationFrame()会返回一个 id 值,类似于 settimeout()函数。cancelAnimationFrame()这个函数可以取消掉 requestsAnimationFrame()的重绘任务。
# 基本的画布功能
创建 <canvas> 元素时至少要设置其 width 和 height 属性,这样才能告诉浏览器在多大面积上绘图。出现在开始和结束标签之间的内容时后备数据,会再浏览器不支持 < canvas > 元素时显示。比如:
1 | <canvas id="drawing" width="200" height="200" >a drawing of something </canvas> |
要在画布上绘制图形,需要给这个方法传入参数 "2d", 表示要获取 2D 上下文对象:
1 | let drawing=document.getElememtById("drawing"); |
可以使用 toDataURL()方法导出 <canvas> 元素上的图像。这个方法接受一个参数,要生成图像的 mime 类型(与用来创建图形的上下文无关)。例如,要从画布上导出一样 png 格式的图片,可以这样做:
1 | let drawing=domcument.getElementById("drawing") |
浏览器会默认图像编码为 png 格式。
# 2D 绘制上下文
2D 绘制上下文提供了绘制 2D 图形的方法,包括矩形、弧形和路径。2D 上下文的坐标原点(0,0)再 <canvas> 元素的左上角。所有坐标值都相对于该点计算,因此 x 坐标向右增长,y 坐标向下增长。默认情况下,width 和 height 表示两个方向上像素的最大值。
# 填充和描边
如何想要实现填充和描边就要用到两个 canvas 的方法,fillStyle 和 strokeStyle
l
1 | let drawing=document.getElementById("drawing") |
# 绘制矩形
举行是唯一一个可以直接在 2D 绘图上下文绘制的图像,与绘制矩形有关的方法有三个:fillRect (),strokeRect (), 和 clearRect()。这些方法都可以接收 4 个参数:矩形 x 坐标,矩形 y 坐标,矩形宽度和矩形长度。
1 | let drawing=document。getElementById("drawing") |
stokeRect () 方法使用通过 stokeStyle 属性指定的颜色绘制矩形轮廓。下面是一个例子:
1 | let drawing=document。getElementById("drawing") |
使用 clearRect()可以使矩形变成透明。