函数完成后的jQuery回调

jQuery callback after function is complete

提问人:Bachir Messaouri 提问时间:2/4/2023 最后编辑:Bachir Messaouri 更新时间:2/4/2023 访问量:42

问:

我有一个脚本,里面有很多高度动画。 所以我想我可以用动画制作一个函数,并随时调用它。 问题是,当功能完成时,我有各种事情可以做。

所以这是我迄今为止的解决方案,效果很好,但并不令人满意(很难知道哪种条件适用于哪种情况):

function animateHeight(element,height,duration,condition){
    element.animate(
        {"height" : height + 'px'},
        {
            duration : duration,
            easing   : 'easeInOutSine',
            complete : function(){
                if     (condition==1){...}
                else if(condition==2){...}
                else if(condition==3){...}
                etc...  
            }
        }
    );
}

function x(){ animateHeight(container,300,450,1) }
function y(){ animateHeight(container,300,450,2) }

但我宁愿在通话后做条件,而不是像:

function animateHeight(element,height,duration){
    element.animate(
        {"height" : height + 'px'},
        {
            duration : duration,
            easing   : 'easeInOutSine'
        }
    );
}

function x(){    
    animateHeight(container,300,450).aferCompletion(function(){
        my custom condition 1
    });
}

function y(){    
    animateHeight(container,300,450).aferCompletion(function(){
        my custom condition 2
    });
}

我在 Stack overflow 中查看并找到了数十个答案,但就我而言,所有答案都失败了。

以下是我尝试过的一些尝试(有些甚至在 Stack Overflow 中发现),但在我的情况下不起作用:

function animateHeight(element,height,duration,condition){ ....}
function x(){ animateHeight(container,300,450,1, function(){console.log('ok')})}

function animateHeight(element,height,duration,condition,callback){ callback();}
function x(){  animateHeight(container,300,450,1, function(){console.log('ok')})}

function animateHeight(element,height,duration,condition){}
function x(){ animateHeight(container,300,450,1).done(function(){console.log('ok')})}

function animateHeight(element,height,duration,condition){}
function x(){   $.when(animateHeight(container,300,450,1)).done(function(){console.log('ok')})}

function animateHeight(element,height,duration,condition){}
function x(){ $.when(animateHeight(container,300,450,1)).then(function(){console.log('ok')})}

function animateHeight(element,height,duration,condition){data='ok';return data;}
function x(){ animateHeight(container,300,450,1).then(function(data){console.log('ok')})}

async function animateHeight(element,height,duration,condition){return;}
function x(){ await animateHeight(container,300,450,1).then(function(){console.log('ok')})}

我发现的大多数答案都是函数在第二个函数完成后调用第三个函数的变体,这不是我想要的。我希望调用一个函数,然后在它完成时返回绿灯,以便我可以直接执行其他操作。 无论出于何种原因,处理我的案子的答案都更难找到。

jQuery 回调

评论


答:

2赞 Barmar 2/4/2023 #1

您可以将代码作为回调函数传递,并从completion:

function animateHeight(element,height,duration, callback){
    element.animate(
        {"height" : height + 'px'},
        {
            duration : duration,
            easing   : 'easeInOutSine',
            completion: callback
        }
    );
}

animateHeight(container,300,450, function() {
    my custom condition 1
});

animateHeight(container,300,450, function() {
    my custom condition 2
});

评论

0赞 Bachir Messaouri 2/4/2023
超级感谢您的帮助。成功了。