実験として、canvasオブジェクトを使用せずにJavaScriptでAS3のスプライト機能を複製しようとしています。絶対に配置されたdivを使用してcssプロパティを操作するのは簡単だと思いましたが、Chromeでは、アニメーションによって奇妙なアーティファクトが発生します(再描画の問題が原因のようです)。
何が間違っているのかわかりませんか?実際、コードは非常に単純です。これが私が試したが役に立たなかったいくつかのポイントです:
- 比較的配置されたdivを使用する(絶対的に配置されるのではなく)。
- マージンの使用(上部と左側のプロパティではなく)
- オブジェクトを本体に直接追加する(コンテナdivに追加するのではなく)
- setTimeoutの使用(requestAnimationFrameではなく)
ここで簡略化されたフィドルを見ることができます:http://jsfiddle.net/BVJYJ/2/
編集:http://jsfiddle.net/BVJYJ/4/
そして、ここであなたは私のブラウザでアーティファクトを見ることができます:
これは私のセットアップのバグである可能性があります(Windows 7 64ビット、Chrome 21.0.1180.75)。他のブラウザはこの動作を示しません。誰かが私が間違っている可能性があることについてコメントしていただければ幸いです。回避策ではなく、この背後にある理由についてもっと興味があります。とはいえ、どんな説明でも大歓迎です。:)
編集:サンプルコードにバグがあり、RAFが使用されているという印象を受けていてもsetTimeoutを使用することになりました。requestAnimationFrameは基本的な変換の問題を解決しますが、問題は回転などのCSS変換に残ります。