2017-10-20 6 views
4

クリックすると小さなセルのGIFアニメーションが表のセルに表示されます。アニメーションはアンループされています。それはちょうどアニメーションのチェックマークです。数回ループしていないgifアニメーションをロードする

HTML:

.... 
<script src="mega_script.js" defer></script> 
<table> 
    <tr> 
    <td onclick="f(this);"></td> 
    <td onclick="f(this);"></td> 
    <td onclick="f(this);"></td> 
    </tr> 
</table> 
.... 

mega_script.js:

function f(obj) { 
    obj.innerHTML = '<img src="images/ok.gif">'; 
} 

まず、それがロードされ、正常にアニメーション化されます。他の表のセルを次にクリックすると、既にアニメーション化されていない.gifが表示されます。どうすればこれを克服できますか?

キャッシュの場合は、どのようにして.gifファイルをクリアすることができますか?

+0

これはうまくいきませんが、画像URLにタイムスタンプを追加することでブラウザのキャッシュを破棄することができます: 'obj.innerHTML = ''; ' –

+0

@Patrick Hund。しかし、どうすればそれが助けられますか?イメージのアドレスは「images/ok.gif」で、「images/ok.gif20171020」などはありません。 – Artik

+0

申し訳ありませんが、私の間違いは、このようなパラメータの意味です: 'obj.innerHTML = '';' –

答えて

2

問題は、ブラウザが一度読み込まれるとイメージがキャッシュされ、イメージが新鮮なときだけアニメーションが実行されるということです。ブラウザがキャッシュからイメージを取り出すときではありません。

たとえば、タイムスタンプのように、イメージが参照されるたびに変更される任意のパラメータをURLに追加することによって、ブラウザにイメージを再読み込みさせることができます。

この方法は、「キャッシュ破損」とも呼ばれます。あなたのケースでは

、あなたはGIFをリロードすると、次のようにそのアニメーションを再トリガするためにブラウザを強制することができます

function f(obj) { 
    obj.innerHTML = '<img src="images/ok.gif?timestamp=' + Date.now() + '">'; 
} 

Date.now()は、私たちに1970年から経過したミリ秒数を与えます関数が呼び出されるたびにURLが少しずつ異なることは合理的に確信できます。

ブラウザはok.gif?タイムスタンプ= 1508487387065ok.gifと同じファイルであることを知る方法がないので?タイムスタンプ= 1508487401817、それは、そのキャッシュを使用してイメージをリロード、あなたを与えることはありません所望の効果。

+0

ありがとう。今私には明らかです。しかし、しばらくしてからキャッシュ領域をオーバーフローさせてしまうのではないでしょうか? – Artik

+0

私はそれがあなたが心配しなければならないものだとは思わない。ブラウザはキャッシュを適切に管理します。ブラウザの開発者がそのことを考えていることを確認できます –

関連する問題