2011-12-17 9 views
0

jQueryを使用して一連のアニメーションを開始したとします。待たずにこれらのアニメーションを加速して副作用をテストするにはどうすればよいですか?すべてのjqueryアニメーションをどのように高速化できますか?

つまり、何がこの魔法tickのような機能ですか?

var el = $('selector'); 
log(el.css("left"));   // 10 

el.animate({left:"-=5"}, 1000); 

log(el.css("left"));   // ≈10 
jQuery.tick(1000);    // accelerate 
log(el.css("left"));   // 5 

単に、setIntervalとsetTimerを嘲笑するだけでは十分ではないようです。

更新

私はjQueryのアニメーションの速度(素晴らしい)への直接フ​​ックのための@ jfriend00の答えを受け入れました。しかし、単体テストでは、fxエンジンをオフにするだけで十分です。それらの答え+1! http://api.jquery.com/jQuery.fx(

+1

[ターボスイッチ](http://en.wikipedia.org/wiki/Turbo_button)を反転するようにユーザーに指示してください:D –

+0

'.stop(false、true)'を使用するのとは別に、 –

答えて

3

既存のアニメーション機能が最初に行うことは、jQuery.speed()を呼び出して、さまざまな引数オプションをanimate()に並べ替えて、速度とその他のオプションを特定します。あなたはその機能にパッチを当て、速度をより短い値に変更することができます。

jQuery.oldSpeed = jQuery.speed; 
jQuery.speed = function() { 
    var opt = jQuery.oldSpeed.apply(this, arguments); 
    opt.duration = Math.floor(opt.duration/10); 
    return(opt);   
} 

アニメーションが既に開始されてもこれは変更されませんが、すべてのアニメーションの時間が短縮されます。他の多くのアニメーション(おそらくすべて)が.animate()自身を呼び出すことになるので、これは他の多くのアニメーションでも機能するはずです。

こちらの作品はhttp://jsfiddle.net/jfriend00/6JUGu/です。 「高速化」ボタンを押すと、次のアニメーションサイクルがより速いスピードで開始します。

+1

+1これはかなり手腕的な解決策です。私はこれをメモするべきです。 :D –

1

は、私はあなたが

各アニメーションのための時間の乗数(おそらくないオプション)を設定する必要があると思いますどちらかだと思います。また、$.fx.off = true;を設定することができます.off /)を使用して、その差異をすぐに確認します。 (加速は見られず、ただちに変更されます)。

+0

fx.offを回すと、アニメーション呼び出しが同期しますか? –

0

または、期間を1000分の1に短縮しますか? :) ユニットテストの口実の下で

2

、私はすべてのアニメーションをスキップが、それでも自分の意図した効果を維持し、あなたがにしたいと仮定していますか?

それはあなたが望むなら、あなただけ$.fx.off = trueを設定することができ、これは世界的にトゥイーン、またはアニメーションからすべてのjQueryのアニメーションを無効にしますが、彼らはすべてまだ彼らの論理的な終わりに移動します。したがって.animate()はアニメーションの欠如のために.css()と本質的に同じになります。

モジュラー型のものをお探しの場合は、代わりに.stop(bool,bool)を呼び出してみてください。たとえば、第2引数にtrueを渡すと、選択した要素の現在実行中のアニメーションが停止します。およびがアニメーションの論理的な端にジャンプします。

関連する問題