Javascript 在“每个函数”中的最后一个元素动画之后执行某些操作

Javascript 在“每个函数”中的最后一个元素动画之后执行某些操作,javascript,jquery,animation,each,Javascript,Jquery,Animation,Each,我想在每个函数中的最后一个元素动画之后做一些事情。 我尝试了下面的代码,但似乎不起作用 $(".menu").click(function() { var elems = $('.top-menu ul li'), i = 0; elems.each(function(i) { i += 1; $(this).delay(70*i).fadeIn(300); if(i == elems.length) {

我想在每个函数中的最后一个元素动画之后做一些事情。 我尝试了下面的代码,但似乎不起作用

$(".menu").click(function() {
    var elems = $('.top-menu ul li'),
        i = 0;
    elems.each(function(i) {
        i += 1;
        $(this).delay(70*i).fadeIn(300);
        if(i == elems.length) {
          $('.bodyWrapper').addClass('noBodyScroll');
        }
    });
});

您已经非常接近了,只需将其移动到
fadeIn
回调,而不必自己管理
i
;jQuery已将其作为
每个
回调的第一个参数提供:

$(".menu").click(function() {
    var elems = $('.top-menu ul li');
    elems.each(function(i) {
        $(this).delay(70*i).fadeIn(300, function() {       // ***
          if(i == elems.length - 1) {                      // *** note the - 1
            $('.bodyWrapper').addClass('noBodyScroll');
          }
        });
    });
});
这不存在循环中的回调问题,因为对
每个
回调的每次调用都会得到自己的
i
参数,该参数不会得到更新

请注意,在第一个
70*I
之前,我独自离开了
I
。如果第一个元素延迟70毫秒很重要,您可能希望继续并增加
i
(这只会发生一次):


您已经非常接近了,只需将其移动到
fadeIn
回调,而不必自己管理
i
;jQuery已将其作为
每个
回调的第一个参数提供:

$(".menu").click(function() {
    var elems = $('.top-menu ul li');
    elems.each(function(i) {
        $(this).delay(70*i).fadeIn(300, function() {       // ***
          if(i == elems.length - 1) {                      // *** note the - 1
            $('.bodyWrapper').addClass('noBodyScroll');
          }
        });
    });
});
这不存在循环中的回调问题,因为对
每个
回调的每次调用都会得到自己的
i
参数,该参数不会得到更新

请注意,在第一个
70*I
之前,我独自离开了
I
。如果第一个元素延迟70毫秒很重要,您可能希望继续并增加
i
(这只会发生一次):


您是否可以共享可执行的演示/代码片段或?[
HTML
丢失..]您可以共享可执行的演示/代码片段还是?[
HTML
缺失..]