0

同期して要素をアニメーション化する必要があります(つまり、アニメーション(この例ではfadeIn())が完了するまで待機するため、適切に続行できます)。

私が知っている限り、私には3つの選択肢があります。

doSomething: function () {
    $('.someElement').fadeIn(function () {
        // do something else here...
    });
}

別のアプローチ($ .proxy()を使用してコンテキストを変更する):

doSomething: function () {
    $('.someElement').fadeIn($.proxy(function () {
        this.doSomethingElse();
    }, this));
},

doSomethingElse: function () {
    // ...
}

ただし、$。proxy()を使用すると、コンテキストが「混合」され、私はこれが本当に好きではありません(いつ戻ってきて、お尻を噛むのかわからないため)、私は時々これを使用していますアプローチ:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        doSomethingElse();
    });

    function doSomethingElse () {
        // ...
    }
}

今、私は疑問に思っています、より良いアプローチはありますか?よりシンプルでエレガントなもの。好き:

doSomething: function () {
    $('.someElement').fadeIn(function () {
        // do this in an async way...
    });

    // simply do something else here...
}

私はクリーンなコードが好きで、この単純でありながらクリーンでないソリューションは好きではないので、この問題は本当に私を悩ませます。

4

2 に答える 2

2

元のオブジェクトを参照する仲介変数を作成します。

doSomething: function () {
    var that = this;
    $('.someElement').fadeIn(function() {
       // use "that" here
    });
}
于 2012-06-27T06:53:26.313 に答える
0

が別のアニメーションである場合doSomethingElse()は、元のコンテキストを維持しながらチェーンしてキューに入れることができます。

于 2012-06-27T07:31:37.263 に答える