4

我已经设置了一个简单的动画方法,如下所示:

Animator: function (obj, aniArgs, duration, aniEasArgs, completeFunction) {
    obj.stop(true, true).animate(aniArgs, {
        duration: duration,
        queue: false,
        specialEasing: aniEasArgs,
        complete: function () {
            if (completeFunction !== null) {

            };
        }
    });
    return obj;
},

我想做的是能够传入 jQuery 字符串以在完整的回调中运行。其他一切正常。例如,我将如何通过

$('#someElement').hide(500);

进入回调?

谢谢!

4

2 回答 2

4

首先,使用要运行的代码创建一个函数:

function complete() {
    $('#someElement').hide(500);
}

然后,在调用 Animator 时传入该函数:

Animator( obj, aniArgs, duration, aniEasArgs, complete );

或者,您可以将函数内联:

Animator( obj, aniArgs, duration, aniEasArgs, function() {
    $('#someElement').hide(500);
});

它们都以相同的方式工作,您可以使用任何一种样式,具体取决于使您的代码更易于阅读的原因。

无论哪种方式,将您的 Animator 代码更改为:

        if( completeFunction ) {
            completeFunction();
        };

或者,你会经常看到这样写的:

        completeFunction && completeFunction();

他们都做同样的事情。这只是您使用的口味问题,只是想我会提到这两种变体,以便您在看到它们时会认出它们。

请注意,!== null这里不需要测试,实际上也不是您想要的。那是因为如果调用者没有传入 a completeFunction,则该变量的值将是undefined,而不是null,因此您的测试将无法进行。有趣的是,您可以!= null在这种情况下使用,因为这将对两者进行测试nullundefined以相同的方式对待它们。但实际上你根本不需要这个明确的测试,如果你唯一要检查的是调用者是否提供了completeFunction回调。

于 2013-04-21T01:21:51.620 回答
0

尝试

Animator: function (obj, aniArgs, duration, aniEasArgs, completeFunction) {
    obj.stop(true, true).animate(aniArgs, {
        duration: duration,
        queue: false,
        specialEasing: aniEasArgs,
        complete: function () {
            if (jQuery.isFunction(completeFunction )) {
                completeFunction.apply(this, arguments);
            };
        }
    });
    return obj;
},

西伯利亚

x.Animator(obj, aniArgs, duration, aniEasArgs, function(){
    $('#someElement').hide(500);
})
于 2013-04-21T01:21:54.067 回答