【问题标题】:setTimeout and animation inside an earlier function早期函数中的 setTimeout 和动画
【发布时间】:2011-08-09 10:37:00
【问题描述】:

为了摆脱在标签(窗口)不活动(失去焦点)期间由setTimeout(或setInterval)引起的动画堆积,我不得不使用递归回调,例如:

function auto() {
interval = setTimeout(function() {      
    $('#slider').animate({left: '-=500'}, 800, function(){
          auto();         // THE RECURSIVE CALLBACK
    });
}, 2000);
}
auto();

现在我希望 重用 #slider动画 本身,因为我已经在之前的 function animate() 中定义了它(不更改function animate 因为我必须在其他地方使用它,就像它一样):

function animate(){
    $('#slider').animate({left: '-=500'}, 800);
}

如何获得这样的工作

function auto() {
interval = setTimeout(function() {  

      animation();auto();  // THIS IS WRONG AS NOT a RECURSIVE CALLBACK - and creates animation buildup     

}, 2000);
}
auto();

提前非常感谢!

【问题讨论】:

    标签: jquery function settimeout


    【解决方案1】:

    animate 接受回调:

    function animate(cb){
        $('#slider').animate({left: '-=500'}, 800, cb);
    }
    
    //...
    
    interval = setTimeout(function() {  
        animation(function(){
            auto();
        });   
    }, 2000);
    

    【讨论】:

    • 嗨菲利克斯! (+1000!)这太好了,你有时间解释这个回调是如何不干扰(如我所料)与同一动画的其他动作的吗? ...谢谢!
    • @roXon:我猜你的意思是为什么它不会导致其他代码在没有回调的情况下调用函数的任何问题?如果没有传递回调,那么cb 将是undefined 并且将undefined 传递给函数与根本不传递参数非常相似(类似于在这种情况下调用.animate({left: '-=500'}, 800))。唯一的区别是内部argument 对象仍会显示undefined 参数,但这不会造成任何问题。
    • 伟大的技巧菲利克斯! (忘记了'beeing undefined')非常感谢! (哇,你在短时间内获得了令人印象深刻的分数!你摇滚!)
    猜你喜欢
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2021-04-28
    • 2012-03-10
    • 2015-06-26
    相关资源
    最近更新 更多