UNPKG

z-util-page

Version:
66 lines (65 loc) 1.77 kB
import { deepClone } from '../deepClone/index'; const defaultConfig = { leading: true, trailing: false }; /** * 函数节流 * @category 辅助函数 * @example * ```ts * interface throttleOptions { * // 首次是否执行 * leading: boolean, * // 结束是否执行 * trailing: boolean * } * let throttle = throttle(function(){ * console.log('身体和心灵,总有一个在路上。'); * return '身体和心灵,总有一个在路上。'; * }, 1000, { * leading: true, * trailing: true * }); * throttle(); * throttle.cancel(); * ``` * @param func 待处理函数 * @param wait 函数执行最短间隔时间 * @param option 函数执行配置 */ export function throttle(func, wait, option) { let options = Object.assign(deepClone(defaultConfig), option || {}); if (options.leading === false && options.trailing === false) throw ('leading, trailing不能同时为false'); let timeout = null, args, content, res; /** * 处理好的节流函数 * @param this 执行上下文继承自传入函数 * @param argList 参数继承自传入函数 */ const throttled = function (...argList) { args = argList; content = this; if (!timeout) { timeout = setTimeout(function () { timeout = null; if (options.trailing) func.apply(content, args); }, wait); if (options.leading) res = func.apply(content, args); } return res; }; /** * 取消节流函数执行 */ throttled.cancel = function () { if (timeout) { clearTimeout(timeout); timeout = null; } }; return throttled; }