javascript - 在每个函数中的最后一个元素动画之后执行一些操作

标签 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) {
          $('.bodyWrapper').addClass('noBodyScroll');
        }
    });
});

最佳答案

你已经很接近了,只需将其移动到 fadeIn 回调中,而不需要自己管理i; jQuery 已将其作为第一个参数提供给您的 each 回调:

$(".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');
          }
        });
    });
});

这不存在循环回调问题,因为每次调用 each 回调都会获得自己的 i 参数,该参数不会更新.

请注意,我在第一个 70*i 之前留下了 i。如果第一个元素延迟 70 毫秒很重要,您可能需要继续增加 i (这只发生一次):

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

关于javascript - 在每个函数中的最后一个元素动画之后执行一些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39702494/

相关文章:

javascript - Jquery 两次点击之间的时间

jquery - 在调整容器 DIV 大小期间隐藏 iframe 会加快响应速度吗?

javascript - 编辑器 : Set scroll event to CKEditor Document

javascript - 在 jQuery 中读取按键

javascript - 使用加号和减号按钮输入

macos - CGAffineTransformMakeScale 不工作 - OS X - Cocoa

javascript - 试图让函数与 window.onload 循环但不起作用

qt - QGraphicsItem 沿着路径移动

javascript - 如何判断图像是否触及屏幕顶部?

javascript - 如何防止无限滚动在选项卡未处于事件状态时加载页面?