我有一段代碼發佈到一個php腳本,該腳本讀取文件夾中的所有文件並將它們返回,所有這些文件都是img的,jquery分析信息,每個var都是一個數組圖像被保存爲img對象與src,寬度,高度和attr,成功我想檢查是否每個圖像加載,然後最後完全激發另一個功能,並刪除一個div。但我不知道如何檢查圖像是否已完全加載,我一直在使用.complete來玩弄,但它似乎沒有加載,函數調用它直到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 load回調。 http://stackoverflow.com/questions/3877027/jquery-callback-on-image-load-even-when-the-image-is-cached – lucuma
我現在沒有時間分析和回答這個問題,但只是請注意''setTimeout(checkFed(),4000);''不**計劃'checkFed'從現在起運行四秒鐘。它立即運行'checkFed' *,然後將它的*返回值*傳遞給'setTimeout'。我沒有看到'checkFed'返回一個函數,所以這可能是問題的一部分。如果您的目標是安排它在四秒鐘後運行,請從'checkFed'後刪除'()'。 –
我想回答這個問題,但目前我沒有時間。似乎提供的答案不會削減。 – Alexander