私はまったく同じ問題を抱えていて、解決策が見つかりませんでした! アニメーション GIF の動作は、デバイス間で非常に一貫性がないようです。それは悪いニュースです。良いニュースは、特にあなたのような ajax ローダーのために、回避策を作成したことです。
GIF のフレームごとに個別の画像ファイルを作成する必要があります。それはひどいように聞こえますが、私にとってはうまくいきました - 私の8フレームの8kbのGIFは、合計11kbの8つのpng画像に変わり、8ビットの透明度のボーナスを得たので、背景色を心配する必要はありません. ただし、クライアントが個別の画像に対して追加のリクエストを行う必要があることを意味するため、フレームが少ないほど良い. 画像を 0.png、1.png ... 7.png と呼び、きれいに保つためにフォルダーに入れました。
ではコード!以下に説明します。
HTML:
<img src="images/loader/0.png" id="headLoader" />
<div id="loaderKicker" style="visibility:hidden;"></div>
JavaScript (jQuery):
var loaderImg = $("#headLoader");
var loaderProg = 0;
setInterval(function() {
$("#loaderKicker").html(loaderProg);
loaderImg.attr("src", "images/loader/"+loaderProg+".png");
loaderProg = (loaderProg+1)%8;
}, 300);
まず、img
アニメーション化する があります。setInterval
フレームを循環するように画像の URL を変更するために使用します。非常に短い間隔は明らかにデバイスに負荷をかけるので、気が狂いそうになりたくありません。私は非常に安価な Android 2.2 デバイスを使用していますが、200 ミリ秒以上の間隔でアプリのパフォーマンスを損なうことなく正常に動作しているようです。
div は、loaderKicker
これを古いデバイス (ターゲットにしているデバイスなど) で機能させるためにあります:))。画像の URL を更新するだけの場合、Android は呼び出しを無視するように見えるため、非表示の div の内容を更新することでこれを回避します。常に「x」で更新しようとしましたが、実際にはコンテンツが異なる必要があるようです。スライド番号はうまく機能します。
それでおしまい!ちょっとしたハック作業ですが、私がテストしたすべてのもの (Android 2.2、2.3、4.0、iOS6、Firefox、IE、Chrome) で動作し、1 つの ajax ローダーでのみ実行している場合は、どこでも使用できます。
もう 1 つの完全に別の解決策は、HTML5 キャンバスを使用して画像をアニメーション化することですが、古いデバイスでのサポートについては何も言えませんでした。