47 lines
1.1 KiB
Markdown
47 lines
1.1 KiB
Markdown
---
|
|
title: Animation
|
|
localeTitle: 动画
|
|
---
|
|
## 画布中的动画
|
|
|
|
要在`canvas`制作动画,请使用`window.requestAnimationFrame`设置绘制循环。
|
|
|
|
```js
|
|
function draw() {
|
|
/* code goes here */
|
|
window.requestAnimationFrame(draw);
|
|
}
|
|
window.requestAnimationFrame(draw);
|
|
```
|
|
|
|
下面的代码将导致`draw`函数每帧运行。
|
|
|
|
`canvas`没有允许动画的特殊功能。你只需要习惯于在动画循环中写作。动画循环的通常设计范例是更新状态,然后绘制状态。例如,要在屏幕上绘制一个正方形:
|
|
|
|
```js
|
|
canvas = document.getElementById("canvas");
|
|
ctx = canvas.getContext('2d');
|
|
|
|
var x=0;
|
|
var y=50;
|
|
function draw() {
|
|
// reset canvas
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
//update state
|
|
x+=1;
|
|
|
|
// render state
|
|
ctx.beginPath();
|
|
ctx.rect(x, y, 50, 50);
|
|
ctx.fill();
|
|
|
|
window.requestAnimationFrame(draw);
|
|
}
|
|
window.requestAnimationFrame(draw);
|
|
```
|
|
|
|
要查看此概念,请参阅“ [粒子模拟](/articles/canvas/particle-sim) ”页面。
|
|
|
|
#### 更多信息:
|
|
|
|
* [MDN Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) |