2011-07-14 3 views
1

いいえ、 だから私はajaxベースのゲームを構築しています。とにかくマルチプレイヤーで、サーバーに接続します。サーバーをポーリングし、常に更新を取得します。とにかく、ゲームにはさまざまなゲーム状態があり、ゲームの状態に基づいてGUIをアニメートする必要があります。ウィンドウがフォーカスされていないときにJqueryアニメーションを強制的に発生させる方法

しかし、この問題は、ウィンドウがフォーカスされていないと、jqueryアニメーションはキューに入れられ、レンダリングされません。これは、ユーザーが5分歩き、戻ってくると、古くなったアニメーションの巨大な列が1つずつ順番に実行されることを意味します。

jqueryアニメーションが呼び出され、フォーカスされたウィンドウを待たずに実行されるように強制する方法があるかどうかは疑問でした。これがなぜ起こるかの詳細については

、追加の注意事項を読み、jQueryのドキュメントのここhttp://api.jquery.com/fadeIn/

乾杯、ジョシュ

+0

私はそれがメモリ占有量やリソースの使用を減らすのに役立つブラウザの機能だと思います。あなたはページコードの中でそれを修正することができないかもしれません。 –

答えて

2

アニメーションによっては、取得body要素にONFOCUSイベントを追加することができますアニメーションキューを.queue()と呼び、1つの要素よりも長い場合は.clearQueue()を呼び出すことができます。もちろん、すべてのアニメーションを削除するので、レイアウトを邪魔しないように注意する必要があります。

また、リストが1つの要素より長い場合は、jQuery.fx.off = trueを実行してみることもできます。これにより、すべてのアニメーションの継続時間を0に設定する必要があります。これにより、キューに入れられたすべてのアニメーションが即時に終了し、再度アニメーションを有効にするには値をfalseに設定する必要があります。しかし、自分で試したわけではないので、まだ実行されていないアニメーション(すでにキューに入っているアニメーション)またはまだ追加されていないアニメーションのみにデュレーションを設定するかどうかはわかりませんキュー。後者の場合は、キューをループして各期間を手動で0に設定できます。

+1

私は試しました: \t \t $(ウィンドウ).focus(function(){jQuery.fx.off = false;}); \t \t \t $(ウィンドウ).blur(function(){jQuery.fx.off = true;}); \t \tは動作し続けると返信します。 –

+0

ええ、これはうまくいきました。 –

1

Zanfaの答えに似ています - あなたはfocusイベントを使うことができますが、blurイベントと組み合わせて使うこともできます。

したがって、すべてのものをクリーンアップしようとするのではなく、blurイベントを使用してゲームをきれいに停止し、アニメーションを停止してから、後でフォーカスを使用して再開させることができます。

関連する問題