for循环中的回调函数?

lue*_*emj 3 javascript jquery for-loop callback

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

我需要做的是淡出任何可见的东西然后淡化特定的对象.由于样式要求,我的topnav和dropdown导航都是针对不同的uls,这就是为什么事情很棘手.

我不是很擅长编写我自己的脚本,所以我(希望)遗漏了一些基本的东西.

我已经尝试在功能中包装东西,但这似乎搞乱了可变范围并搞砸了我不明白的东西......

谢谢你的帮助!

$('.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();
        }
    }
}); 
Run Code Online (Sandbox Code Playgroud)

use*_*654 6

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

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

淡出所有ksdd没有ddtop该类的元素,然后在完成所有动画时执行某些操作.

更多信息:

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

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