3

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

我需要做的是淡出任何可能可见的东西,然后淡入特定的对象。由于样式要求,我的 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();
        }
    }
}); 
4

2 回答 2

6

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

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

淡出所有ksdd没有ddtop类的元素,然后在它们都完成动画后做一些事情。

更多信息:

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

如果您改为将回调函数直接传递给.fadeOut(),您将获得每个元素的回调,而不是在它们全部完成后获得一个回调。

于 2012-06-25T18:19:05.340 回答
1

代替:

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

尝试:

$('.ksdd').each(function(){
    if (! $(this).hasClass(ddtop) ){
        $(this).fadeOut();
    }
});
于 2012-06-25T18:16:23.320 回答