requestAnimationFrameの使用方法

アインシュタイン:

アニメーションは初めてですが、最近を使用してアニメーションを作成しましたsetTimeoutFPSが低すぎるため、requestAnimationFrameこのリンクで説明されている使用する解決策を見つけました

これまでのところ、私のコードは:

//shim layer with setTimeout fallback
    window.requestAnimFrame = (function(){
        return  
            window.requestAnimationFrame       || 
            window.webkitRequestAnimationFrame || 
            window.mozRequestAnimationFrame    || 
            window.oRequestAnimationFrame      || 
            window.msRequestAnimationFrame     || 
            function(/* function */ callback){
                window.setTimeout(callback, 1000 / 60);
            };
    })();
    (function animloop(){
        //Get metrics
        var leftCurveEndX = finalLeft - initialLeft;
        var leftCurveEndY = finalTop + finalHeight - initialTop;
        var rightCurveEndX = finalLeft + finalWidth - initialLeft - initialWidth;
        var rightCurveEndY = leftCurveEndY;

        chopElement(0, 0, 0, 0, leftCurveEndX, leftCurveEndY, rightCurveEndX, rightCurveEndY);//Creates a new frame 
        requestAnimFrame(animloop);
    })();

これは最初のフレームで停止します。関数requestAnimFrame(animloop);コールバック関数がありchopElementます。

また、このAPIを使用するためのより完全なガイドはありますか?

1月:

警告!この質問は、シムを行うための最良の方法についてではありません requestAnimFrameそれを探しているなら、このページの他の答えに進んでください。


自動セミコロン挿入でだまされました。これを試して:

window.requestAnimFrame = function(){
    return (
        window.requestAnimationFrame       || 
        window.webkitRequestAnimationFrame || 
        window.mozRequestAnimationFrame    || 
        window.oRequestAnimationFrame      || 
        window.msRequestAnimationFrame     || 
        function(/* function */ callback){
            window.setTimeout(callback, 1000 / 60);
        }
    );
}();

JavaScriptはreturnステートメントの後ろにセミコロンを自動的に置きますこれは、改行が続き、次の行が有効な式であるためです。実際、次のように翻訳されます。

return;
window.requestAnimationFrame       || 
window.webkitRequestAnimationFrame || 
window.mozRequestAnimationFrame    || 
window.oRequestAnimationFrame      || 
window.msRequestAnimationFrame     || 
function(/* function */ callback){
    window.setTimeout(callback, 1000 / 60);
};

このコードはundefinedreturnステートメントの背後にあるコードを返し、決して実行しません。そうwindow.requestAnimFrameですundefinedで呼び出すとanimloop、JavaScriptはエラーを生成し、実行を停止します。式を括弧で囲むことで問題を解決できます。

JavaScriptの実行を検査するためにChrome開発者ツールまたはFirebugをお勧めします。これらのツールを使用すると、エラーが発生します。次のようにデバッグする必要があります(私はChromeを想定しています)。

  1. コードを実行します(予期しない結果になります)
  2. 開発者ツールを開きます(右クリック->要素の検査)右側のステータスバーに赤いxが表示されます(これは、実行にエラーがあることを意味します)
  3. コンソールタブを開きます
  4. あなたは見るでしょう
    Uncaught TypeError:オブジェクト[object DOMWindow]のプロパティ 'requestAnimFrame'は関数ではありません
  5. コンソールにwindow.requestAnimFrame入力し、Enterキーを押すと、それが表示されますundefinedこれで、問題は実際には無関係requestAnimationFrameであり、コードの最初の部分に集中する必要があることがわかりました。
  6. 今度は、何かを返すまでコードを絞り込むということです。これは難しい部分であり、それでもこの時点で見つからない場合は、インターネットを利用してさらに支援を求めることができます。

また、javascriptを作成する際のいくつかの良い習慣についてはこのビデオをご覧ください。彼は、悪意のあるセミコロンの自動挿入についても言及しています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事