防抖与节流运用(封装)
防抖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let Trembling=(fn:Function,deplay:number)=>{ let timer:any = null return ()=>{ if(timer!==null) {clearTimeout(timer)} timer=setTimeout(()=>{fn()},deplay); } }
let changes=Trembling(()=>{ console.log("前端深造中") },1500)
|
节流:在这里节流我并没有封装,有兴趣的小伙伴可以自行封装试试看,和防抖的函数相同(如若不想封装的请参考下方)
1 2 3 4 5 6 7 8 9 10 11 12 13
| let flag =true const throttle=()=>{ if(flag){ setTimeout(()=>{ console.log("hello") flag = true },1000) flag =false } }
|
节流(封装)
1 2 3 4 5 6 7 8 9 10 11 12
| let throttle=(fn:Function,deplay:number)=>{ let flag = true return ()=>{ flag && setTimeout(()=>{fn(),flag=true},deplay) flag=false } }
window.addEventListener('scroll',throttle(()=>{ console.log("hello") },1000))
|
注:这里的8次代表我一直在滚动界面,由于我间隔时间为1s,故只发送8次
1 2 3
| window.addEventListener('scroll',()=>{ console.log("前端深造中") })
|
如果我这样来写,一旦我轻轻的滚动页面,你就会发现请求了次数高达近200,要明白节流的作用就是减缓请求次数
如有issure还望指出,正在成长中……