src 属性を書き換えて開始する img タグにアニメーション GIF があります。ただし、gif はループするように作成されており、一度だけ再生したいのです。Javascript または jQuery を使用して、アニメーション GIF が複数回再生されないようにする方法はありますか?
7 に答える
gif が 1 回ループするのにかかる時間を調べることができますか? その場合は、次のように画像を停止できます。
疑似コード:
wait until the end of the image (when it is about to loop)
create a canvas element that has a static version of the gif as currently displayed drawn on it
hide gif
display canvas element in a way that makes it look like the gif froze
JavaScript:
var c = $("canvas")[0];
var w = c.width;
var h = c.height;
var img = $("img")[0];
setTimeout(function () {
c.getContext('2d').drawImage(img, 0, 0, w, h);
$(img).hide();
$(c).show();
},10000);
編集: これを元にした元の回答への参照を追加するのを忘れました、ごめんなさい
その1つは、1つのループだけに必要な時間要素に対処していません
また、このアプローチは特定の場合に問題があることが言及されています (現在、Firefox で試してみると、実際には機能しませんでした...)。したがって、ここにいくつかの代替手段があります:
マークによる言及: ループを避けるために gif 自体を編集します。可能であれば、これが最良のオプションです。しかし、それがオプションではない場合に遭遇しました(サードパーティによる画像の自動生成など)
キャンバスで静的画像をレンダリングする代わりに、静的画像バージョンを保持し、ループを停止するように切り替えます。これはおそらくキャンバスの問題としてほとんどの問題を抱えています
実際には、1回の反復または特定の反復回数の後にgifを停止することができます。以下の例(まだ停止していない場合)またはjsfiddleを参照してください。
これを行うには、反復回数を指定して gif を作成する必要があります。これは、 Screen to Gifを使用して実行できます。これにより、gif または画像の束を開いて、フレームごとに編集できます。
このソリューションでは、アニメーションをリセットすることもできますimgElem.src = imgElem.src;
が、これは MS IE/Edge では機能しません。
この回答に基づいて、それはちょっと高価ですが、うまくいきます。1 回のループに 2 秒かかるとします。setInterval の 2 秒後に setTimeout が発生すると、ミリ秒ごとにイメージ ソースがリセットされます。
setTimeout(function() {
setInterval(function() {
$('#img1').attr('src',$('#img1').attr('src'))
},1)
}, 2000)
繰り返しますが、おそらく単なる概念実証ですが、ここにデモがあります: http://jsfiddle.net/MEaWP/2/