我为我的用户制作了一个“拖放”文件上传实用程序。我用 13 张 PMG 图片制作了一个上传进度条,并使用 jQuery 对其进行动画处理。如果用户只是同时删除一个或两个文件,那效果很好。但我注意到,如果用户删除了 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']);
这是一个好的解决方案吗?还是有“正确”/更好的方法?
谢谢!
编辑:如果旧浏览器不支持这个也没关系。这些脚本用于管理区域,仅由我认识的人使用。(而且他们都有现代浏览器。)