私の最初のブログ:requestAnimationFrame学習ノート
12064 ワード
通常、ブラウザでアニメーションを書くにはどのような技術が使われますか?
flash
非常に複雑なアニメーションを実現することができますが、HTML 5が成熟するにつれて、個人的にはflashが明日の黄花になるような気がします.
css3
現在、ほとんどの現代ブラウザはcss 3をサポートしています.transformで2 D/3 D変換を実現し、transitionで要素遷移効果を実現し、animationとkeyframesを組み合わせて複雑なアニメーションを実現します.しかもcss 3でアニメを書くメリットは、間違いを報告しないことです.私たちが脚本を書くときは文法の間違いがよくありますが、cssはできません.ブラウザがルールを知らないと役に立たないのではないでしょうか.(PS:ie 6などのアンティークブラウザをサポートする必要がある学生がいます.HTML 5やCSS 3の新しい属性を使うときは、このサイトに行くことができます.http://caniuse.com/主流ブラウザやブラウザの各バージョンで使用する新しい機能のサポート状況を調べると、作業効率が向上します.
jsタイマsettimeout/setInterval
タイマーをセットしてループでhtml要素を動かすことができます~これはみんなが使います
しかし、今日登場するのはHTML 5のrequestAnimationFrameです.
第1感じ、名前はとても长くて、翻訳して“アニメーションのフレームを求めます”のようです.どんなメリットがありますか?HTML 5がこのAPIを発売したのは、主にアニメーションの性能を最適化するためだ.
なんというか、fps(画面毎秒伝送フレーム数)は多くのディスプレイで60で、対応する表示周波数は16.7 ms/回です.したがって、タイマを設定するときにこの値よりも間隔が低い場合、フレームによってはペイントできないものもあります.これにより、いわゆる「トランジションペイント」が発生し、アプリケーションのパフォーマンスに影響を与える可能性があります.requestAnimationFrameはブラウザの描画間隔に従って歩き、移行せずに描画し、リソースを効率的に利用し、自然にスムーズ~各ブラウザのサポートも良い(詳細は以下を参照:http://caniuse.com/#search=requestanimationframe)
余計なことを言って、コードを見てみましょう.
この例はcanvasの絵にも触れていますが、ついでにcanvas apiも固めてください.
reference:
http://www.webhek.com/requestanimationframe/
http://www.zhangxinxu.com/wordpress/tag/requestanimationframe/
flash
非常に複雑なアニメーションを実現することができますが、HTML 5が成熟するにつれて、個人的にはflashが明日の黄花になるような気がします.
css3
現在、ほとんどの現代ブラウザはcss 3をサポートしています.transformで2 D/3 D変換を実現し、transitionで要素遷移効果を実現し、animationとkeyframesを組み合わせて複雑なアニメーションを実現します.しかもcss 3でアニメを書くメリットは、間違いを報告しないことです.私たちが脚本を書くときは文法の間違いがよくありますが、cssはできません.ブラウザがルールを知らないと役に立たないのではないでしょうか.(PS:ie 6などのアンティークブラウザをサポートする必要がある学生がいます.HTML 5やCSS 3の新しい属性を使うときは、このサイトに行くことができます.http://caniuse.com/主流ブラウザやブラウザの各バージョンで使用する新しい機能のサポート状況を調べると、作業効率が向上します.
jsタイマsettimeout/setInterval
タイマーをセットしてループでhtml要素を動かすことができます~これはみんなが使います
しかし、今日登場するのはHTML 5のrequestAnimationFrameです.
第1感じ、名前はとても长くて、翻訳して“アニメーションのフレームを求めます”のようです.どんなメリットがありますか?HTML 5がこのAPIを発売したのは、主にアニメーションの性能を最適化するためだ.
なんというか、fps(画面毎秒伝送フレーム数)は多くのディスプレイで60で、対応する表示周波数は16.7 ms/回です.したがって、タイマを設定するときにこの値よりも間隔が低い場合、フレームによってはペイントできないものもあります.これにより、いわゆる「トランジションペイント」が発生し、アプリケーションのパフォーマンスに影響を与える可能性があります.requestAnimationFrameはブラウザの描画間隔に従って歩き、移行せずに描画し、リソースを効率的に利用し、自然にスムーズ~各ブラウザのサポートも良い(詳細は以下を参照:http://caniuse.com/#search=requestanimationframe)
余計なことを言って、コードを見てみましょう.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>An Example:requestAnimationFrame&canvas</title>
<style type="text/css">
html{
background: #000;
}
</style>
</head>
<body>
<script>
(function(){
window.requestAnimationFrame= //
window.requestAnimationFrame||
window.webkitRequestAnimationFrame||
window.mozRequestAnimationFrame||
window.oRequestAnimationFrame||
window.msRequestAnimationFrame||
function(callback,element){
window.setTimeout(callback,1000/60);
};
var canvas,context,toggle;
init();
animate();
function init(){
canvas=document.createElement("canvas");
canvas.width=512;
canvas.height=512;
context=canvas.getContext("2d");
document.body.appendChild(canvas);
}
function animate(){
requestAnimationFrame(animate); //requestAnimationFrame
draw();
}
function draw(){
var time=new Date().getTime()*0.002;
var x=Math.sin(time)*192+256;
var y=Math.cos(time*0.9)*192+256;
toggle=!toggle;
context.fillStyle=toggle?'rgb(200,200,20)':'rgb(20,20,200)';
context.beginPath();
context.arc(x,y,10,0,Math.PI*2,true);
context.closePath();
context.fill();
}
})();
</script>
</body>
</html>
この例はcanvasの絵にも触れていますが、ついでにcanvas apiも固めてください.
reference:
http://www.webhek.com/requestanimationframe/
http://www.zhangxinxu.com/wordpress/tag/requestanimationframe/