2011-12-23 56 views
1

我在每次迭代中下载图像。所以逻辑&代码在每个下载图像的迭代器中都有。我希望当所有图像下载完成后,立即我想调用一个函数,通知用户所有图像下载完成。 请指导我修改我现有的代码。当所有图像下载完成时触发一个功能

这里是我的代码

$(document).ready(function() { 
$("table[id*=dgImages] img").each(function() { 
if($(this).offset().top > $(window).scrollTop() && $(this).offset().top < $(window).scrollTop() + $(window).height()) { 


$(this).attr("src", $(this).attr("original")); 
$(this).removeAttr("original"); 
} 
}); 
}); 

回答

1

的jQuery推迟对象救援:

var def = [];     // an array to store deferred objects 

$('img').each(function() {  // for each image 
    var d = $.Deferred();  // create a new deferred object 
    def.push(d);    // store it in the array for later 
    $(this).load(d.resolve); // and on load, "resolve" it 
}); 

$.when.apply($, def)   // $.when(def[0], def[1], ...); 
.then(function() {    // are all resolved, then 
    alert("all loaded!");  // do your stuff here 
}); 
+0

我有一个关于代码ü给一点混乱。 $ .Deferred()将存储在d中? d.resolve会返回图像路径或任何不同的东西? $ .when.apply($,def).then(函数()会自动调用所有图像下载?我的要求是这样的假设我有100个图像下载,但我只下载10个图像,当用户向下滚动然后下一个所以我需要知道,当10个图像下载完成了100,然后when.apply()会发射或没有?请详细讨论.... merry chrismas&谢谢 – 2011-12-23 11:50:02

+0

@ user750398您可能需要阅读http://api.jquery.com/category/deferred-object/以了解延迟对象是如何工作的。re:一次只有10个 - 这是一个很难解决的问题。 – Alnitak 2011-12-23 11:55:06

相关问题