节流函数
节流函数的作用类似LOL、王者荣耀英雄的攻速,在前期等级不高时无论我们多快点击攻击按钮,英雄的攻击速度(攻击频率)都不会根据我们点击速度而改变。点击频率不会同步英雄攻击频率,而是有一个间隔时间(interval)在控制英雄攻速。
基础节流函数
function throttle(fn, interval, options) {
// 1.记录上一次的开始时间
let lastTime = 0
// 2.事件触发时, 真正执行的函数,点击多少次这个函数就会执行多少次。
const _throttle = function(..args) {
// 2.1.获取当前事件触发时的时间
const nowTime = new Date().getTime()
// 2.2.使用当前触发的时间和之前的时间间隔以及上一次开始的时间, 计算出还剩余多长事件需要去触发函数
const remainTime = interval - (nowTime - lastTime)
if (remainTime <= 0) {
// 2.3.真正触发函数
fn.apply(this, args);
// 2.4.保留上次触发的时间
lastTime = nowTime
}
}
return _throttle
}
第一次不需要执行(leading参数)
可选参数用options传入。
function throttle(fn, interval, options = {
leading: true }) {
const {
leading } = options
let lastTime = 0
const _throttle = function (..args) {
const nowTime = new Date().getTime()
// lastTime === 0 第一次执行这个函数 && leading === false 用户不需要执行第一次。
// lastTime = nowTime:就是remainTime === interval,等于重新开始。
if (lastTime === 0 && leading === false) lastTime = nowTime;
const remainTime = interval - (nowTime - la