JS节流
作者:互联网
export default function throttle(fn, interval = 1000, options = { leading: true, trailing: false }) { // 1.记录上一次的开始时间 const { leading, trailing, resultCallback } = options let lastTime = 0 let timer = null // 2.事件触发时, 真正执行的函数 const _throttle = function(...args) { return new Promise((resolve, reject) => { // 2.1.获取当前事件触发时的时间 const nowTime = new Date().getTime() if (!lastTime && !leading) lastTime = nowTime // 2.2.使用当前触发的时间和之前的时间间隔以及上一次开始的时间, 计算出还剩余多长事件需要去触发函数 const remainTime = interval - (nowTime - lastTime) if (remainTime <= 0) { if (timer) { clearTimeout(timer) timer = null } // 2.3.真正触发函数 const result = fn.apply(this, args) if (resultCallback) resultCallback(result) resolve(result) // 2.4.保留上次触发的时间 lastTime = nowTime return } if (trailing && !timer) { timer = setTimeout(() => { timer = null lastTime = !leading ? 0: new Date().getTime() const result = fn.apply(this, args) if (resultCallback) resultCallback(result) resolve(result) }, remainTime) } }) } _throttle.cancel = function() { if(timer) clearTimeout(timer) timer = null lastTime = 0 } return _throttle }
标签:const,节流,leading,timer,JS,result,throttle,lastTime 来源: https://www.cnblogs.com/hljjway/p/16412857.html