手写代码系列之防抖与节流
乔文飞 Lv8

防抖

思路:在规定时间内未触发第二次,则执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function debounce(fn, delay){
// 利用闭包保存定时器
let timer = null;
return function(){
let context = this;
let args = arguments;
// 在规定时间内再次触发
// 会先清除定时器再重设定时器
clearTimeout(timer);
timer = setTimeout(function(){
fn.apply(context, args)
},delay);
}
}

// 使用举例:
function fn1(){
console.log("防抖")
}
addEventListener("scroll", debounce(fn1, 1000))

节流

思路:在规定时间内只触发一次

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function throttle(fn, delay){
// 利用闭包保存时间
let prev = Date.now();
return function(){
let context = this;
let args = arguments;
let now = Date.now();
if(now - prev >= delay){
fn.apply(context, args);
prev = Date.now();
}
}
}

// 使用举例:
function fn2(){
console.log("节流")
}
addEventListener("scroll", throttle(fn2, 1000))
  • 本文标题:手写代码系列之防抖与节流
  • 本文作者:乔文飞
  • 创建时间:2021-03-16 15:26:28
  • 本文链接:http://www.feidom.com/2021/03/16/手写代码系列之防抖与节流/
  • 版权声明:本博客所有文章为作者学习笔记,有转载其他前端大佬的文章。转载时请注明出处。