无法使FadeIn和FadeOut同步行动?

时间:2010-01-29 15:14:57

标签: jquery effects

我正在尝试使用jquery在两个图像之间制作动画,然后逐渐消失,然后逐渐消失。

但是,我不能让它们同步行动,fadeIn()总是在fadeOut()完成之前被调用:

$(function() {
            var tabContainers = $('#tabwrap > div');
            var listItems = $('#tabwrap ul.tabnav li');
            listItems.click(function() {
                var second = tabContainers.filter($(this)[0].title);
                tabContainers.fadeOut('slow', function() {
                    second.fadeIn('slow');
                });

            $('#tabwrap ul.tabnav').removeClass('selected');
            $(this).addClass('selected');

            return false;
        }).filter(':first').click();

        listItems.hover(function() {
        });
    });

$('#tabwrap ul.tabnav').removeClass('selected'); $(this).addClass('selected'); return false; }).filter(':first').click(); listItems.hover(function() { }); });

有什么想法吗?

干杯,艾德

5 个答案:

答案 0 :(得分:1)

我认为问题在于,当您调用fadeOut函数时,您的某些项目已经淡出,以便立即触发。

下面的代码经过测试并且有效,但可以进一步细化。我会把它留给你:

var tabContainers = $('#tabwrap > div');
var listItems = $('#tabwrap ul.tabnav li');
tabContainers.hide();
var $selectedDiv = $("#tab1").show();

listItems.click(function() {
    var $this = $(this);
    var $myDiv = $("#" + $this.text().toLowerCase());
    if ($selectedDiv.attr("id") != $myDiv.attr("id")) {
        $selectedDiv.fadeOut('slow', function() {
            $myDiv.fadeIn('slow');
        });
        $selectedDiv = $myDiv;
    }

    $('#tabwrap ul.tabnav').removeClass('selected');
    $(this).addClass('selected');

    return false;
});

答案 1 :(得分:0)

编写的代码......

tabContainers.fadeOut('slow', function() {
    second.fadeIn('slow');
});

fadeIn()完成后显式调用fadeOut()。你将fadeIn传递给fadeOut的第二个参数作为回调,在完成时执行。

你试过这个吗?

tabContainers.fadeOut('slow');
second.fadeIn('slow');

答案 2 :(得分:0)

编辑:这里实际上是这样尝试

tabContainers.fadeOut(500);
setTimeout("FadeInImage();", 490);

function FadeInImage()
{
    tabContainers.hide();
    second.fadeIn('slow');
}

答案 3 :(得分:0)

尝试排队动画,而不是在回调上运行它:

tabContainers.fadeOut('slow').queue(function() {
    second.fadeIn('slow');
    $(this).dequeue();
});

答案 4 :(得分:0)

让jQuery等待动画结束的另一种方法是promise()方法。当代码的另一部分需要等待并且你没有处理你应该等待的对象时,这很好,你可以使用jQuery选择器获取它们然后调用promise来等待所有的返回的对象完成。

E.g。 $('.animating').promise().done(function( arg1 ) { alert( "Done animating."); });