在每个函数之后运行一个函数

Run a function after each function

本文关键字:函数 一个 之后 运行      更新时间:2023-09-26

由于某种原因,我无法在每个函数完成后运行函数。这就是我尝试过的,每个函数都能完美运行,但在完成后它不会运行另一个函数。

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

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

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);
});

-演示-

我想你想做的是这个 http://jsfiddle.net/gon250/8mdodywe/

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

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

我想这就是你想要的:

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/

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

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