-
Notifications
You must be signed in to change notification settings - Fork 0
/
手写节流,防抖.js
55 lines (51 loc) · 1.34 KB
/
手写节流,防抖.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//防抖:在执行完后一段时间执行回调,如果在这段时间内在此执行将会取消之前的延时回调
//频繁出发后,只执行一次
// function debounce(fn,delay) {
// //1.初始化定时
// let timer = 0;
// return ()=>{
// //2.清除定时
// clearTimeout(timer);
// //3.等待n秒后执行
// timer = setTimeout(()=>{
// fn()
// },delay);
// }
// }
function debounce(fn,delay) {
let timer = 0;
return ()=>{
const args = arguments;
const context = this;
clearTimeout(timer);
timer = setTimeout(()=>{
fn.apply(context,args);
},delay);
}
}
//节流:每次触发都会判断是否到达执行的延时函数
//固定时间做一件事
function throtte(fn,delay) {
//1.记录上一次事件时间
let lasttime = 0;
return ()=>{
//2.记录现在的时间
let now = Date.now();
//3.如果超过delay的时间执行函数,并且改变上次的时间
if(now-lasttime>delay){
fn();
lasttime = now;
}
}
}
//防抖
function fd( fn,delay ) {
let timer = null;
return (...args)=>{
const ctx = this;
clearTimeout(timer);
timer = setTimeout(()=>{
fn.apply(ctx,args);
},delay);
}
}