每个功能后运行一个功能

时间:2015-03-12 15:37:59

标签: javascript jquery

出于某种原因,我无法在每个功能完成后运行一个函数。这是我尝试过的,每个函数都可以正常工作,但是当它完成时它不会运行另一个函数。

var delay = 0;
$('h1 span').each(function() {
    var $span = $(this);
    setTimeout(function() { $span.addClass('visible'); }, delay+=1000, function(){
        $('header').addClass('visible');
    });
});

4 个答案:

答案 0 :(得分:1)

如果我理解你的预期行为,你可以在延迟函数中使用以下逻辑:

var delay = 0;
$('h1 span').each(function () {
    var $span = $(this);
    setTimeout(function () {
        $span.addClass('visible');
        // if $span is last of 'h1 span' matched set
        if ($span.is($('h1 span').last())) {
            $('header').addClass('visible');
        }
    }, delay += 1000);
});

-DEMO-

答案 1 :(得分:1)

我认为你想要做的就是http://jsfiddle.net/gon250/8mdodywe/

setTimeout()函数不支持两个回调。

$.when($('span').each(function() {
    $(this).addClass('visible');
})).then(function(){
    $('header').addClass('visible');
});

答案 2 :(得分:0)

我想这就是你想要的:

var delay = 0;
$('h1 span').each(function() {
    var $span = $(this);
    setTimeout(function() { $span.addClass('visible'); }, delay+=1000);
});
setTimeout(function() { $('header').addClass('visible'); }, delay);

检查出来:http://jsfiddle.net/zsm4xegr/

答案 3 :(得分:0)

我假设你想要两次超时?在您的代码中,似乎您希望在"延迟0"之后执行第一个超时。在这种情况下,只需执行第一个"回调"并为第二个设置一个时间。 如果你确实想要两次超时(每次超过1000毫秒):

$('h1 span').each(function() {
    var $span = $(this);
    setTimeout(
        function() { 
            $span.addClass('visible');
            setTimeout( 
                function() {
                   $('header').addClass('visible');
                },
                1000
             );        
        }, 
        1000        
    );
});