2

我的网页有问题。我有 4 个 div,它们都应该在前一个淡出之后全部淡入。我使用的代码是:

$('.btn').click(function(){
    $('#box3').delay(5000).fadeOut('slow', function(){
        $('#box4').fadeIn('slow');
    });
});

使用#box1 > #box2 它可以工作,使用#box2 > #box3 它可以工作,但是当我尝试从#box3 > #box4 开始时,有时#box3 会淡出然后用#box4 淡入。我不知道它为什么这样做。

谢谢,

http://jsfiddle.net/chLRa/4/现在工作。有时当从 3 到 4 时,它仍然会在 3 和 4 中消失

4

4 回答 4

5

这是一个简单的辅助函数来帮助您执行此操作。

function fade(thisIn, callback){
    boxes.not(thisIn).filter(':visible').delay(5000).fadeOut('slow', function(){
        thisIn.fadeIn('slow', callback);
    });
}

jsFiddle

于 2013-07-23T20:25:33.233 回答
3

我会说尝试使用finish()方法:

$('.btn').click(function(){
    $('#box3').finish().delay(5000).fadeOut('slow', function(){
        $('#box4').fadeIn('slow');
    });
});

在您的情况下,在 delay() 之后使用它可能会更好

于 2013-07-23T19:29:42.003 回答
0

jQuery 官方文档说,第二个参数不是回调,而是缓动风格。

http://api.jquery.com/fadeIn/#fadeIn-duration-easing-complete http://api.jquery.com/fadeOut/#fadeOut-duration-easing-complete

$('#el').fadeOut(750,'swing',function(){
    $('#el').fadeIn();
});

因此,只需将您的回调移动到第三个参数,一切都会奏效。

于 2015-04-03T23:26:43.960 回答
0

使用这些方法的回调版本可能会更好:

$('.btn').click(function(){
    $('#box1').fadeOut('slow', function() {
        $('#box2').fadeIn('slow', function() {
            $('#box2').fadeOut('slow', function() {
                $('#box3').fadeIn('slow', function() {
                    $('#box3').fadeOut('slow', function() {
                        $('#box4').fadeIn('slow', function() {
                            $('#box4').fadeOut('slow');
                        });
                    });
                });
            });
        });
    });
});

jsFiddle

于 2013-07-23T19:52:53.903 回答