UNPKG

x-js-utils

Version:
48 lines (47 loc) 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var timeoutArr = []; var flagArr = []; /** * 节流函数 * 节流原理:在一定时间内,只能触发一次 * @param {Function} fn 要执行的回调函数 * @param {Number} time 延时的时间 * @param {Boolean} isImmediate 是否立即执行 * @param {String} timeoutName 定时器ID * @return 返回的定时器 */ function throttle(fn, time, isImmediate, timeoutName) { if (time === void 0) { time = 500; } if (isImmediate === void 0) { isImmediate = true; } if (timeoutName === void 0) { timeoutName = "default"; } if (!timeoutArr[timeoutName]) timeoutArr[timeoutName] = null; if (isImmediate) { if (!flagArr[timeoutName]) { flagArr[timeoutName] = true; // 如果是立即执行,则在time毫秒内开始时执行 if (typeof fn === 'function') fn(); timeoutArr[timeoutName] = setTimeout(function () { flagArr[timeoutName] = false; timeoutArr[timeoutName] = undefined; }, time); } } else { if (!flagArr[timeoutName]) { flagArr[timeoutName] = true; // 如果是非立即执行,则在time毫秒内的结束处执行 timeoutArr[timeoutName] = setTimeout(function () { flagArr[timeoutName] = false; if (typeof fn === 'function') fn(); timeoutArr[timeoutName] = undefined; }, time); } } return timeoutArr[timeoutName]; } ; exports.default = throttle;