【问题标题】:$.each and animation confusion$.each 和动画混淆
【发布时间】:2010-04-11 02:15:29
【问题描述】:

我在等我去的时候

$.each($(something).find(something), function(){
   $(this).delay(1000).fadeOut();
});

然后对于每个匹配的元素,我都会在它消失之前延迟一秒钟。但我得到的是一秒钟的延迟,然后一切都消失了。现在是凌晨 3 点,我无法思考。请帮忙

【问题讨论】:

    标签: jquery


    【解决方案1】:

    这将起作用,使用 jQuery 对象作为参数调用它:

    function fadeAll(elems) {
        var i=-1;
        function next() {
            i = i+1;
            if (i < elems.length)
                $(elems[i]).delay(1000).fadeOut(next);
        }
        next();
    }
    

    你可以在工作中看到它here

    【讨论】:

    • 你会如何使用动画而不是淡出?就好像你去例如 animate({something : 'its value'}, next());它再次跳到最后
    • @XGreen:应该是 next 而不是 next()
    【解决方案2】:

    如果我对您的问题的解释正确,您希望事情在一秒钟内消失吗?如果是这样,你想要的是$(this).fadeOut(1000);,它设置淡入淡出的持续时间;执行delay(1000) 只需等待一秒钟它开始您的fadeOut() 操作。

    【讨论】:

    • 另外,这不需要重复:这应该可以工作$(something).find(somethingelse).fadeOut(1000) -- 一次性完成(不需要each
    • 我想要的是延迟 1 秒 -> elem[0] 淡出 -> 延迟 1 秒 -> elem[1] 淡出。
    • 现在想想,每个淡出函数都可能是对 prev 元素淡出的回调,但它可能看起来像是历史上写过的最糟糕的代码
    • 在这种情况下,您希望按顺序运行动画。参考这个stackoverflow.com/questions/1218152/…
    • 那不是很好是吗?我的意思是我在这里处理未知数量的元素,它们可能很多
    【解决方案3】:

    这应该是基本思路:

    var set = $(something).find(something);
    var delayFade = function(){
         $(this).delay(1000).fadeOut(400, nextDelayFade);
    };
    var i = 0;
    var nextDelayFade = function()
    {
      if(i < set.length)
      {
        $(set[i++]).each(delayFade);
      }
    };
    nextDelayFade();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 2018-02-17
      • 1970-01-01
      • 2016-07-11
      • 2012-01-02
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多