3

私はfadeToをたくさん使用するので、この関数を簡単に使用しています。

function fade_to(div, speed, opacity, after_fade) {
    $(div).fadeTo(speed, opacity, after_fade);
}

次に、after_fadeパラメーターに対して同じ関数を呼び出しています。

fade_to('#div', 3000, 1, function() { fade_to('#another_div', 3000, 1)});

それは悪いことですか?速度/滑らかさの問題はありますか?jQueryのデフォルトのfadeTo関数を使用する方が良いですか?

ありがとう!

4

6 に答える 6

5

あなたの方法で得られる利益はありません。さらに、jQuery fadeTo 関数を使用しています。あなたがしたことに何の問題もありません。たとえば、カスタム関数の引数が少ない場合は、このような手法で作業を節約できます。

function fade_to(div, after_fade) {
    $(div).fadeTo(3000, 1, after_fade);
}

fade_to('#div', function(){ fade_to('#another_div', $.noop); });

これにより、速度と不透明度の引数を入力する必要がなくなり、実際に作業が節約されます。こんな感じでカレーもできます

function Fade_to(speed, opacity){
     return function(div, callback){
           $(div).fadeTo(speed, opacity, callback);
     }
}

次に、次のようにその場で引数保存関数を作成できます

var fade_to_foo = Fade_to(3000, 1);
fade_to_foo('#div', function(){ fade_to_foo('#another_div'); });

それ以外の場合は、jQuery の方法で記述しない理由はありません

$('#div').fadeTo(3000, 1, function(){ $('#another_div').fadeTo(3000, 1); });
于 2012-04-09T16:29:59.270 に答える
5

関数が呼び出されるすべてのインスタンスに適用しないと、これ以上修飾子を使用できないため、これは悪い習慣です。jQuery では修飾子を連鎖させることができ、そうすることは便利な機能であることにほとんどの人が同意するため、自分自身またはこのコード本体で作業している他の人に対してその便利な機能を無効にしています。

アニメーションやスタイリングを追加したい場合は、今度は通常の jQuery を使用してオブジェクトを再度選択する必要があります。余分な仕事、余分な電話、本当の利益はありません。

于 2012-04-09T16:25:59.907 に答える
1

この方法は、チェーン可能な短い構文ライブラリとして jQuery を使用するという目標に反しています。ただし、この特定の機能がプロジェクトに役立つ場合は、効果的です。

于 2012-04-09T16:30:25.527 に答える
1

マイク、

これが必ずしも「悪い」ことであるかどうかはわかりません。使いやすさや、 API はそうでなければしません。

実際、関数呼び出し自体を持つことは、ツリーをトラバースするのに役立つ「再帰」と呼ばれる CS のアイデアを使用しています (再帰とツリーの両方をググって、ここで言及していることをよりよく理解することができます)、または実行します。ある種の数学的操作 (つまり、ユークリッド アルゴリズム)。

もしあなたがこれをしているなら、「なぜ」と尋ねるのは素晴らしい考えだと思います. 余分な時間にパラメーターを渡しているため、速度の点で何も得られず、関数は API の実装と比較して余分なことを達成していません (少なくとも私が見ていること)。これを習慣化すると...たとえば、より計算負荷の高い関数で...速度が低下することに気付くかもしれません。

ここであなたの質問に答えるだけでなく、なぜこれを行うのが一般的に悪い考えなのかについて、さらに洞察を与えることを望んでいます. dunsmoreb と Thomasdotnet にも同意します。良い点!

-sf

于 2012-04-09T16:31:52.587 に答える
1

あなたのアプローチは便利です。フェード効果が遅くなるとは思えません。私の考えでは、このアプローチに問題はありません。フェード効果がフェードの前にパルスまたは点滅する必要があると判断した場合は、関数をパルス/点滅するように変更するだけでよく、すべてのフェード呼び出しをフェードしてから新しいルーチンを実行します。この場合、コードが減り保守性が向上するので理にかなっています。Ericosg は有効な点を指摘していますが、パラメーターが同じになる場合はパラメーターを減らしてはいけません。

于 2012-04-09T16:25:18.580 に答える