节流的核心
持续触发某事件,在特定的时间间隔内,只执行一次;我一般多用于滚动事件,例:吸顶
方法封装
const throttle = function (fn, delay, mustRunDelay) {
var timer = null; // 初始化
var t_start;
return function () {
var context = this, // 当前作用域的this
args = arguments, // 函数的所有参数
t_curr = +new Date(); // 事件触发时间
clearTimeout(timer); // 清除计时器
if (!t_start) {
t_start = t_curr;
}
if (t_curr - t_start >= mustRunDelay) {
// 正常范围内触发事件 调用函数
fn.apply(context, args);
t_start = t_curr;
} else {
// 事件触发频繁,延迟执行
timer = setTimeout(function () {
fn.apply(context, args);
}, delay);
}
};
};