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) |