当延迟完成后,如何在.each()之后触发一个函数?

时间:2013-09-09 19:00:44

标签: jquery

我一直在尝试使用网站上发现的建议来解决我的问题的不同方法,但无法使其发挥作用。

需要在最后一个图像淡入后触发一个功能,并且我发现的每个工作解决方案都是在图像淡入之前触发的,只要我点击触发器'btn。 这是我一直在研究的代码。希望它得到很好的解释,有人可以指出我正确的方向,无论是使用此代码还是采用不同的路线。

的jQuery

function logosOn() {
    $('.sections img').each(function(i) {
        $(this).delay((i++) * 200).fadeTo(500, 1);
    });
}
$('#logo').click(function(){
    logosOn()           
});

HTML

<img src="logo-big.png" alt="" id="logo" />    
<div class="sections">
    <img src="logo-interiorismo.png" alt="" />
    <img src="logo-arquitectura.png" alt="" />
    <img src="logo-arte.png" alt="" />
</div>

2 个答案:

答案 0 :(得分:0)

使用.promise()

$('#logo').click(function(){
    logosOn();
    $('.sections img').promise().done(foo);       
});

.promise()

  

.promise([type] [,target])

     

退货:承诺

     

描述:返回一个Promise对象,观察a的所有动作   某个绑定到集合的类型,排队与否,已完成。

答案 1 :(得分:0)

Promise应该在这里帮助你:

var defs = [];
$('.sections img').each(function(i) {
    defs.push( $(this).delay((i++) * 200).fadeTo(500, 1).promise() );
});

$.when.apply(null, defs).then(function() {
    // Your callback here!
});

这是一个正在运行的演示:http://jsbin.com/UCukiN/3/edit