You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
function throttle(fn, delay) {
let last = 0, timer = null;
return function () {
let now = +new Date();
if (now - last < delay) {
clearTimeout(tiemr);
timer = setTimeout(fn, delay);
} else {
last = now;
clearTimeout(tiemr);
fn();
}
}
}
前言
前端开发最注重的就是用户体验。但是用户往往在交互过程中体验到卡顿,那么就会很不愉快。
举几个例子:
scroll
事件,当我们轻轻拨动一下鼠标滚轮,会触发12次scroll
事件处理器(在chrome浏览器上的测试数据),而如果我们在事件处理器里面占用了过多cpu,就会阻塞页面的渲染,也就是常说的页面卡顿。scroll
事件还有拖拽事件,也会有类似的情况防抖(debounce)
概念:事件回调必须在事件发生的若干时间之后才会被执行。如果发生多个事件,则以最后一个事件为准。
实现方式:
闭包 + 异步回调模块,通用模板如下
通过简单修改,也可以变为仅触发第一次事件,若干时间间隔内不会再触发:
节流(throttle)
概念:两个事件回调的执行之间有个最小间隔,换句话说,前面的事件回调执行完了之后,后面的事件回调会在最小间隔时间之后才能被执行。
实现方式:
闭包 + 异步回调模块,通用模板如下:
节流和防抖结合
参考:
轻松理解JS函数节流和函数防抖
JavaScript专题之跟着underscore学防抖
JavaScript专题之跟着 underscore 学节流
The text was updated successfully, but these errors were encountered: