在html5 canvas中绘制图像动画 效果 ,你需要绘制出每一帧的图像,然后在 一个 极短的时间内从一帧过渡到下一帧,形成动画 效果 。
示例
要在html5画布上绘制动画,您需要在画布上绘制和重新绘制动画的帧。您需要非常快地这样做,以使许多图像看起来像动画。
为使动画获得最佳 性能 ,requestAnimationFrame 在window对象上使用回调 函数 。您可以 调用 此 函数 ,并在浏览器准备绘制动画的下一帧时将要 调用 的另 一个 函数 作为参数传递。
当浏览器准备绘制下一帧时,通过让浏览器向应用程序发出信号,浏览器可以为动画启用硬件加速,并与浏览器中的其他重绘活动协调帧重绘。与使用JavaScript中的setTimeout() 函数 对动画帧的绘制进行计时相比,总体体验应该要好得多。
这是 一个 代码 示例:
function?animate()?{
????reqAnimFrame?=?(window.webkitRequestAnimationFrame?||
?window.mozRequestAnimationFrame?||
?window.oRequestAnimationFrame?||
?window.msRequestAnimationFrame?||
?function(callback)?{
??var?self?=?this,?start,?finish;
??return?window.setTimeout(function()?{
???start?=?+new?Date();
???callback(start);
???finish?=?+new?Date();
???self.timeout?=?1000/60?-?(finish?-?start);
??},?self.timeout);
?});
????reqAnimFrame(animate);
????draw();
}
animate() 函数 首先获得对该requestAnimationFrame() 函数 的引用。请注意,此 函数 在不同的浏览器中可能具有不同的 名称 。将该变量 reqAnimFrame设置为所有这些不为null的可能 函数 。
其次,reqAnimFrame() 调用 函数 ,将animate() 函数 作为参数传递。因此,当浏览器准备绘制下一帧时,将animate() 调用 该 函数 。
第三,animate() 函数 调用 draw() 函数 。draw() 上例中未 显示 该 功能 。它应该做的是,首先清除画布(或需要清除的画布 数量 ),然后绘制动画的下一帧。
上例中未 显示 的另一件事是,animate()应 调用 一次 函数 以启动动画。如果没有,requestAnimationFrame()则永远不会 调用 该 函数 ,并且永远不会开始动画循环。
这是 一个 在画布上移动单个矩形的动画示例:
<canvas?id="ex1"?width="500"?height="170"?style="border:?1px?solid?#cccccc;">
HTML5?Canvas?not?supported
</canvas>
<script>var?x?=??0;
var?y?=?15;
var?speed?=?5;
function?animate()?{
reqAnimFrame?=?(window.webkitRequestAnimationFrame?||
?window.mozRequestAnimationFrame?||
?window.oRequestAnimationFrame?||
?window.msRequestAnimationFrame?||
?function(callback)?{
??var?self?=?this,?self.timeout);
?});
reqAnimFrame(animate);
x?+=?speed;
if(x?<=?0?||?x?>=?475){
speed?=?-speed;
}
draw();
}
function?draw()?{
var?canvas??=?document.getElementById("ex1");
var?context?=?canvas.getContext("2d");
context.clearRect(0,?0,?500,?170);
context.fillStyle?=?"#ff00ff";
context.fillRect(x,?y,?25,?25);
}
animate();
</script>
HTML5 Canvas 转换 ? ?HTML5 Canvas 像素处理
查看更多关于HTML5 Canvas 制作动画的详细内容...