t-comm
Version:
专业、稳定、纯粹的工具库
39 lines (37 loc) • 844 B
JavaScript
/**
* 节流
*
* 连续触发事件但是在 n 秒中只执行一次函数
* @param {Function} fn 主函数
* @param {number} time 间隔时间,单位 `ms`
* @returns 闭包函数
*
* @example
*
* ```ts
* function count() {
* console.log('xxxxx')
* }
* window.onscroll = throttle(count, 500)
* ```
*/
function throttle(fn, time) {
var timer;
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
// @ts-ignore
// eslint-disable-next-line @typescript-eslint/no-this-alias
var that = this;
// const args = [...arguments];
if (!timer) {
timer = setTimeout(function () {
timer = null; // 注意,一定要先置为null,再执行fn
fn.apply(that, args);
}, time);
}
};
}
export { throttle };