スクロールイベントは、私が働いているプロジェクトに発砲し、課税のものをデバウンスすることは実行可能な解決策になることを発見しますときに私はいくつかのパフォーマンスの問題に実行してきた:jQueryイベントオブジェクトは、イベントハンドラ内で匿名関数からアクセスできますか?
jQuery(document).ready(function() {
jQuery(window).on('scroll', debounce(function(e) {
console.log('debounced');
console.log(e); // will print the corresponding jQuery object
// some heavy work
}, 250, true)
);
});
function debounce(func, wait, immediate) {
var timeout;
return function() {
var obj = this, args = arguments;
if (timeout) clearTimeout(timeout);
else if (immediate) func.apply(obj, args);
timeout = setTimeout(function() {
if (!immediate) func.apply(obj, args);
timeout = null;
}, wait || 100);
};
};
私の質問はどのように、ありますjQueryイベントオブジェクトはdebounce()内で正しく渡されていますか? これは、ハンドラとして設定された関数の最初の引数として渡されるはずです、ここではdebounce()ですか?
この解決策はうまくいっているようですが、ここでは欠落している概念がありますか?
NB:デバウンス機能についてJohn Hannにクレジット
は 'debounceOnce() 'は? – technophobia
編集して申し訳ありません、 'debounce()'を参照していました。最初は、デバウンスが複数回処理されたという事実のために意味されていました。実際に私が望んでいたものではありませんでした。別のソリューションを試してみました。デバウンスをデバウンスに変更しました。そして、最終的には、ハンドラ。 – decksterr
jQueryイベントオブジェクトはargumentsオブジェクトから取得されます。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments – Will