次のようなシナリオに直面しました。問題を解決するjQueryの組み込み方法があるのでしょうか? 。Javascriptでは、関数がすでに実行されている場合に関数の実行をキューに入れ、以前にキューに入れられたものをキャンセルします。
$(document).click(function() {
paintCanvas();
});
このコードの問題は、ユーザが画面上で迅速に連続して50回をクリックした場合は、paintCanvasに50回のコールでブラウザをオーバーロードしようとしているということです。
は、次のコードを想像してみてください。
paintCanvasが現在実行中で、新しいリクエストが作成された場合、paintCanvasが実行を終了するまで待機するように新しいリクエストをキューに入れたいとします。しかし同時に、すべての中間状態ではなく、マウスの最終状態のみを気にするので、以前にキューに入れられた呼び出しをpaintCanvasにドロップできます。
var _isExecuting, _isQueued;
function paintCanvas() {
if (_isExecuting) {
if (!_isQueued) {
_isQueued = true;
setTimeout(function() {
_isQueued = false;
paintCanvas();
}, 150);
}
return;
}
_isExecuting = true;
// ... code goes here
_isExecuting = false;
};
This AJAX queue plugin基本的にこの機能を実装していますが、唯一のAJAXの面でそう:ここ
は、問題を解決し、いくつかのコードです。確かに、これはより一般的な方法で解決できる非常に一般的な問題ですか?
Ext-JSには、ハンドラを設定するときに同じコンセプトが組み込まれていますが、Element.addListener( "click"、this、{buffer:150})のようなオプションを与えることができます。もう一度呼び出され、カウンタが再起動されます).http://docs.sencha.com/core/source/Observable.html#method-Ext.util.Observable-addListenerユーザーがjQueryについて質問したことは分かりますが、私は他のフレームワークにこれが組み込まれていることを言いたいだけです –
他のjavascriptフレームワークがありますか? – cbp
私は、jQueryには耐えられません:)私は手続き型コードの代わりにOOコードを好む。だからこそ私は完全にOOベースのExt-JSを使用しています。 –