ユーザー向けに「ドラッグアンドドロップ」ファイルアップロードユーティリティを作成しました。13個のPMG画像からアップロードプログレスバーを作成し、jQueryを使用してアニメーション化しました。ユーザーが1つまたは2つのファイルを同時にドロップするだけであれば、これは非常にうまく機能します。しかし、ユーザーが10個のファイルをドロップすると、ブラウザーがすべての画像に対して要求を行うことに気付きました(130要求)。ブラウザがこれらの画像をキャッシュから取得する場合もありますが、取得しない場合もあります。したがって、私の解決策は、次のように画像をプリロードすることでした。
function preload()
{
// create object
imageObj = new Image();
// set image list
images = new Array();
images[0]="img/ProgressBarContent.png";
images[1]="img/ProgressbarEndEffect.png";
images[2]="img/0.png";
images[3]="img/1.png";
images[4]="img/2.png";
images[5]="img/3.png";
images[6]="img/4.png";
images[7]="img/5.png";
images[8]="img/6.png";
images[9]="img/7.png";
images[10]="img/8.png";
images[11]="img/9.png";
images[12]="img/percentIcon.png";
images[13]="img/ProgressBar.png";
// start preloading
for(var i = 0; i < images.length; i++)
{
imageObj.src=images[i];
if(i == (images.length-1))
{
//preloading done, give a visual feedback and droping functionality can be activated
hideLoadingOverlay();
}
}
}
しかし、それは何の違いもありませんでした。
そのため、PHPスクリプトに必要な画像を読み取らせ、それらをbase64としてエンコードし、次のようなJavaScript配列として出力できると思いました。
$file= base64_encode( file_get_contents ( 'img/0.png') );
echo 'images["img/0.png"] = "data:image/png;base64,'.$file.'";';
そうすれば、画像を直接HTMLに「ハードコーディング」することもできますよね?
JavaScriptでこれができると思いました:
$(".selector").attr("src", images['filename']);
これは良い解決策ですか?または、「適切な」/より良い方法はありますか?
ありがとう!
編集:古いブラウザがこれをサポートしていないかどうかは関係ありません。スクリプトは、私が知っている人だけが使用する管理領域に使用されます。(そして、それらはすべて最新のブラウザーを備えています。)