私は、Javascriptを使用して一連のマップイメージ用の単純なアニメーションビューアを作成しようとしています。私が最初にこの読み込みに失敗したイメージ配列からイメージを削除またはスキップするには?
while(datetime <= endDatetime)
{
var fname = getImgFnameFromDate(datetime);
var imgAdd = new Image();
imgAdd.src = fname;
imgStore.push(imgAdd);
datetime.setMinutes(datetime.getMinutes() + 15);
}
し、各画像間の短い待ち時間でそれらをループ状グローバル配列に画像を読み込みます。
ここで、マップはほぼリアルタイムで作成され、時には一部が欠落することがあります。ファイルが読み込まれず、代わりにアニメーションの途中で壊れたリンクイメージが表示されます。私は単純に、読み飛ばされなかった画像をスキップしたいのですが、その画像をスキップしたり、配列から取り除いたりしています。
私は
function iter()
{
++imgIndex;
if (loopFlag) imgIndex = imgIndex % imgStore.length;
document.getElementById("map").src=imgStore[imgIndex].src;
if (imgStore[imgIndex].width == 0) iter();
}
のようなものは、しかし、これは信頼性が低いと、多くの場合、イメージがあったの前にトリガするために表示される無限ループにつながるすなわち「isLoaded」のプロキシとしてイメージwidth属性を使用して試してみましたロードするチャンス。
私は画像のonError関数を指定しようとしましたが、その関数が何をすべきか分かりません。私は本当にイベントではなく、何らかのisLoaded属性が必要です。多分、私はこれについて間違った方法をとっていますか?あなたはそれをロードする際に、画像オブジェクトにフラグを設定し、後でそのフラグをテストすることができます
ありがとうございます。しかし、まだ問題があるようです。提案したonload()ビヘイビアを使用してイメージ配列を作成した後、myLoadFlag = trueでないイメージをスキップしてイメージをループします。残念ながら、すべての画像をスキップします。画像がロードされる(またはそのようなことが起こる)前に、このチェックが開始されるように見えます。 .srcの前にonload()を設定していることを確認しました。これとは対照的に、すべてのイメージを表示するだけで、このフラグの値をスクリーンに出力すると、すべてが正しいように見えます。欠落した画像は未定義であり、良好な画像は真である。 – Bogdanovist
@ user1282133 - 必要に応じて後でJSを介して読み込むのではなく、ページが最初に読み込まれるときにjavascriptでイメージをプリロードすることができます。これにより、必要な前に読み込む時間が長くなります。それらをより速くロードさせる方法はありません。彼らはロードに時間がかかります。参考までに、このコードは画像が読み込まれていないと誤って判断しません。彼らはまだロードされていないときにあなたに指示します。準備が整う前にロードされることを期待しているだけです。プリロードスキームを使用しない限り、コードをロードするまでWAITする必要があります。 – jfriend00