如何在下面的for循环中的所有fadeOut之后运行函数?

我需要做的是淡出任何可能可见的东西,然后淡入特定对象。由于样式要求,我的topnav和dropdown nav位于不同的ul中,这就是为什么有些棘手的原因。

我不太擅长编写自己的脚本,所以(希望)缺少一些基本知识。

我试图将东西包装在函数中,但这似乎与可变范围混淆并弄乱了我不明白的东西...

谢谢你的帮助!

$('.ksddtop').on('mouseenter', function(){
    var ddtop = $(this).text();
    var dd = $('.' + ddtop);
    $('.ksddwrap').fadeIn();
    $(dd).fadeIn();

    var ksdds = $('.ksdd');
    for(var i = 0; i < ksdds.length; i++) {
        var ksdd = ksdds[i];
        if (! $(ksdd).hasClass(ddtop) ){
            $(ksdd).fadeOut();
        }
    }
});

最佳答案

如果我了解要求,则应该这样做:

$('.ksdd:not(' + ddtop + ')').fadeOut().promise().done(function(){
    // all done fading!
});

淡出所有没有ksdd类的ddtop元素,然后在它们都完成动画处理后执行一些操作。

更多信息:

在jQuery集合上调用.promise将为您提供一个promise对象,该对象将在元素集合上的所有动画完成时解析。这包括排队的动画。

如果您直接将回调函数传递给.fadeOut(),则对每个元素都将获得一个回调,而不是在所有元素完成之后获得一个回调。

09-20 04:24