我已經運行到某些性能問題時,一個滾動的事件會得到一個項目我工作的解僱,發現去抖徵稅的東西將是一個可行的解決方案:事件處理程序中的匿名函數內可訪問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()'。起初的意思是因爲debounce被多次處理......這實際上並不是我想要的,所以嘗試了不同的解決方案 - 在這個過程中進行debouceOnce的最終反擊 - 最後想出了直接把debounce作爲事件處理程序。 – decksterr
從參數對象中檢索jQuery事件對象。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments – Will