Javascript JQuery动画递归

Javascript JQuery动画递归,javascript,jquery,recursion,Javascript,Jquery,Recursion,我试图确保我的动画一个接一个地出现,但我不能让函数只执行一次。我发送的方法被调用了两次,当我调用递归方法时,这个方法被调用了两次 window.onload = function() { blink(function() { console.log("Done");// <-- 4 times :( }); }; function closeEyes(delay, onComplete) { var pos = parseInt($(

我试图确保我的动画一个接一个地出现,但我不能让函数只执行一次。我发送的方法被调用了两次,当我调用递归方法时,这个方法被调用了两次

window.onload = function() {
    blink(function() {
        console.log("Done");// <-- 4 times :(       
    });
};

function closeEyes(delay, onComplete) {
    var pos = parseInt($('.eye').css('margin-top')) + 16;  
    $('.eye').animate({'margin-top' : pos + "px"}, { duration: delay, queue: false, complete: onComplete});
    $('.eye').animate({'height' : '4px'}, { duration: delay, queue: false});                                 
}

function openEyes(delay, onComplete) {    
    var pos = parseInt($('.eye').css('margin-top')) - 16; 
    $('.eye').animate({'margin-top' : pos+'px'}, { duration: delay, queue: false, complete: onComplete});
    $('.eye').animate({'height' : '32px'}, { duration: delay, queue: false});        
}

function blink(onComplete) {
    //called ONCE
    closeEyes(250, function() {
        //called TWICE
        openEyes(250, onComplete); //<-- onComplete is executed 4 times
    });    
}
window.onload=function(){
闪烁(函数(){

console.log(“Done”);//我们找到了答案-我问了工作中的人。在创建了一个fiddle之后,我们意识到我有两个使用“eye”的类-因此每个类都调用了完整的闭包。

假设递归调用它自己, 然后,需要添加一个计数器使其无效

功能闪烁(次数,未完成){
返回$
.何时(闭上眼睛(250))
.然后(函数(){
返回时间
?闪烁(--次,未完成)
:(填写|$.noop)()
;
})
;
}

四次问题可以用
$解决。when()
,但实际上您不需要设置回调,因为动画是自动链接的。谢谢!when()工作完美!我很担心bing背靠背执行的两个功能。你是说一个无限循环打开和关闭眼睛吗?我需要先闭上眼睛,然后打开眼睛。我会重复几次。这并不能回答问题。若要评论或要求作者澄清,请在t下面留下评论继承人帖子。-@shabeer事实上是这样的-如果你创建了一个JSFiddle(它不喜欢有的链接,因此为什么不包括在这里)用一只眼睛看,它可以像预期的那样工作,但是在同一个类中添加额外的HTML元素,它就会开始复合。当你开始考虑实现时,这就有了各种各样的意义。再加上我是作者,因此我知道我的问题何时得到回答。在社区论坛中,发布一段n如何解决您的问题。因此,其他有相同问题的人将知道如何解决问题,而不是说您找到了asnwer。我很抱歉这样想,以便开发人员能够理解代码实际上是好的,问题是同一类有多个div。我假设一个简单的问题解决方案是最好的,但显然我是错的吴.不过,我亦不准备为了检讨而把时间延长。