- 初次触发事件,立即执行(可选)
- 对于在事件被触发 n 秒后再执行的回调,即延迟执行
如果在这 n 秒内再触发事件,重新开始计时
/**
* @description 防抖函数
* @param {function} fn - 目标函数
* @param {number} delay - 延迟时间
* @param {boolean} triggerNow - 是否立即执行
* @returns {function}
*/
function debounce (fn, delay, triggerNow) {
var t = null;
var debounce = function () {
var _self = this,
args = arguments;
if (t) {
clearTimeout(t);
}
if (triggerNow) {
var exec = !t;
t = setTimeout(function () {
t = null;
}, delay);
if (exec) {
fn.apply(_self, args);
}
} else {
t = setTimeout(function () {
fn.apply(_self, args);
}, delay);
}
}
debounce.remove = function () {
clearTimeout(t);
t = null;
}
return debounce;
}