デスクトップで非常にうまく機能する2Dキャンバスの回転を実行していますが、モバイルスペースに小さな問題が1つあります。これが拡大されたスクリーンショットです:
親指の画像は500msの間に約0.2rad回転します。私が思うのは、関連するすべてのコードが以下にインラインであるということです。ご覧のとおり、画像の上隅のそれぞれに、ある種の「軌跡」が残っています。
var duration = 500;
var start = 0;
var stop = 0.287554326;
var step = (stop - start) / 10;
var steps = (stop - start) / step;
var current = 0;
var delay = duration / steps;
var first = true;
if (navigator.userAgent.match(/iP(hone|[ao]d)|android/i)) step *= 1.5;
var rotate_int = setInterval(function() {
if (current >= stop) {
clearInterval(rotate_int);
callback && callback();
return;
}
ctx.clearRect(0, 0, cvs.width, cvs.height);
ctx.translate(cvs.width / 2, cvs.height / 2);
ctx.rotate(step);
current += step;
ctx.translate(cvs.width / -2, cvs.height / -2);
ctx.drawImage(i, 0, 0);
if (first) {
first = false;
thumb.hide();
}
}, delay);
ノート:
- コードはデスクトップで非常にうまく機能します(Firefox、Chrome、Safari、Opera、さらにはIEの最新版)
- 次のデバイスとブラウザをテストしました。
- iPhone 3GS:Safari、Opera Mini
- iPhone 4S:Safari
- iPad(第1世代):Safari
- Android Galaxy S(ジンジャーブレッド付き):デフォルトのブラウザ、Firefox mobile
- Motorola Droid X(ジンジャーブレッド付き):デフォルトのブラウザ、Firefox mobile
<canvas>
動作を示すデスクトップブラウザ(をサポート)が見つかりません- 動作を示さないモバイルデバイスは見つかりませんでした
- 投稿された画像はiPadから拡大したスクリーンショットです
- 重要な場合は、
<canvas>
(回転中)が(jQueryを介して)アニメーション化され、背後の画像を通過して停止します。これはスクリーンショットに表示されています。 <canvas>
ページにも2番目があります。同じサムズアップ.pngを使用し、上記と同じコードを使用して回転し、別の背景画像を通過するようにアニメーション化されます(ただし、反対方向に、1つの「サムズアップ」が北西に移動し、もう1つが南東に移動します) )、およびトレイルは、キャンバスコンテキストに対して同じ場所に表示されます。
何かが診断につながることを期待して、私は私が考えることができるこの壁にすべての泥を投げました。他の誰かが以前にこのようなものを見たことがありますか?別の方法で何を試すことができますか?そのような動作を警告するHTML5チュートリアルサイトの大きな赤い警告ラベルを見逃したことがありますか?
==編集1==
@GGGのコメントによると、UAスニフ(デスクトップと同じ設定を使用するとモバイルブラウザがすべてチャグするため、キャンバスの再描画の回数と頻度を減らすように設計されています)を削除しましたが、それによってトレイルがより顕著になりました(例:より厚い)。次に、UAスニフを元に戻して実験しましたが、ループを50%減らす代わりに、実際には500%増やしました。繰り返しになりますが、これにより、トレイルがさらに顕著になりました。ただし、この厚み付けは漸近的であるように見えます。つまり、アニメーション速度のパラメータを微調整することで、トレイルを厚みにすることができる厚さに制限があります。
==編集2==
@GGGの他のコメントによると、適切な回避策を見つけるために、画像を編集して透明なデータを追加しました。私が見たのは、画像がキャンバスの上端と左端に突き出ていることでした(これは「HTML5」ではなく「Photoshop<canvas>
キャンバス」です)。透明なデータの均等なパディングを上部と左側に追加すると、ストリーキングの問題は解消されました。これが元のPSD(pre me-adding-extra-spacing)でした:
したがって、私の質問は次のようになります。画像が[Photoshop]キャンバス全体に(不透明なピクセルで)塗りつぶされている場合でも、キャンバスコンテキストがclearRect()
それ自体で動作しないのはなぜですか?それはキャンバスの範囲内で何かを消し去るべきではありませんか?もしそうなら、なぜそれはこれらのいくつかのピクセルを残すのですか?
==編集3==
いくつかの調査の結果、Cairoはいくつかの主要なレンダリングエンジン(少なくともWebKitとGecko)でかなり一般的に使用されていることがわかりました。@JonasWielickiが最初に提案したように、Cairoライブラリ(モバイル実行用に最適化されている場合)はおそらく少し熱心すぎるというのは事実でしょうか?