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テストし、それらを同じように扱うためです。しかし、実際には、呼び出し元がコールバックを提供したかどうかだけを確認する場合は、この明示的なテストはまったく必要ありません。nullundefinedcompleteFunction

于 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 に答える