如何在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();
}
}
});
答案 0 :(得分:6)
如果我理解要求,应该这样做:
$('.ksdd:not(' + ddtop + ')').fadeOut().promise().done(function(){
// all done fading!
});
淡出所有没有ksdd
类的ddtop
个元素,然后在完成动画制作时执行某些操作。
更多信息:
在jQuery集合上调用.promise
会为您提供一个promise对象,该对象将在元素集合上的所有动画完成时解析。这包括排队的动画。
如果您将回调函数直接传递给.fadeOut()
,那么您将获得每个元素的回调,而不是在完成所有元素之后的回调。
答案 1 :(得分: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();
}
});