【发布时间】:2026-01-21 08:40:02
【问题描述】:
我有一个发布到 php 脚本的代码,该脚本读取文件夹中的所有文件并返回它们,它们都是 img 的,jquery 解析信息,在一个数组的 var 上,每个图像都保存为一个 img 对象使用 src 、宽度、高度和属性,成功后我想检查每个图像是否已加载,然后最终完全触发另一个函数并删除一个 div。但我不知道如何检查图像是否已完全加载,我一直在玩弄 .complete 但它似乎永远不会加载,该函数调用 itef 直到加载 img 然后返回 true 以便它可以保持去。这是代码,有点乱,可能不是很好的编码。
var gAllImages = [];
function checkFed()
{
var leni = gAllImages.length;
for (var i = 0; i < leni; i++) {
if (!gAllImages[i].complete) {
var percentage = i * 100.0 / (leni);
percentage = percentage.toFixed(0).toString() + ' %';
console.log(percentage);
// userMessagesController.setMessage("loading... " + percentage);
checkFed();
return;
}
//userMessagesController.setMessage(globals.defaultTitle);
}
}
if($('slideshow')){
var topdiv = '<div id="loading"><div class="centered"><img src="/karlaacosta/templates/templatename/images/ajax-loader.gif" /></div> </div>';
$('#overall').append(topdiv);
//console.log('alerta');
var jqxhr = $.post('http://localhost/karlaacosta/templates/templatename/php/newtest.php', function(data){
var d = $.parseJSON(data);
//console.log(d[1]);
if(typeof(d) == 'object' && JSON.parse){
var len = d.length;
//console.log(len);
for(var i = 0; i < len; i++){
var theImage = new Image();
var element = d[i].split('"');
// console.log(element);
// console.log(element[4]);
theImage.src = '/karlaacosta/images/Fotografia/TODO'+element[0];
theImage.width = element[2];
theImage.height = element[4];
theImage.atrr = element[6];
gAllImages.push(theImage);
}
// console.log(html);
}else{
console.log('error');
}
}).success(function (){
setTimeout('checkFed', 150);
}).error(function(){
var err = '<div id="error"><h2>Error: Lo sentimos al parecer no se pueden cargar las imagenes</h2></div>';
$('#loading').append(err);
}).complete(
function(){
var len = gAllImages.length;
var html = '<ul class="slides">'
for(var i = 0; i < len; i++){
html += '<li><img src="'+gAllImages[i].src+'" width="'+gAllImages[i].width+'" height="'+gAllImages[i].height+'" attr="'+gAllImages[i].attr+'" /></li>';
}
html += '</ul>';
$('#slideshow').append(html);
}
);
jqxhr.complete(function(){
//
imageSlide();
$('#loading').remove();
//
console.log('completed');
});
}
如果我取出 checkFed() 的递归性,显然脚本完成了,当图像放在 html 上时,它们加载得又快又好,缓存中是否永远不会加载?也欢迎对代码的其他部分提出任何其他建议。
【问题讨论】:
-
可以使用 img 加载回调。 *.com/questions/3877027/…
-
我现在没有时间分析和回答这个问题,但请注意
setTimeout(checkFed(), 4000);确实不安排checkFed在四秒后运行。它立即运行checkFed,然后将其返回值传递给setTimeout。我没有看到checkFed返回一个函数,所以这可能是问题的一部分。如果您的目标是安排它在四秒后运行,请从checkFed之后删除()。 -
我想回答这个问题,但我现在没有时间。似乎提供的答案不会成功。