JS篇(防抖/节流)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS篇(防抖/节流)相关的知识,希望对你有一定的参考价值。
参考技术A 在前端开发中会遇到一些频繁的事件触发,比如:window 的 resize、scroll
mousedown、mousemove
keyup、keydown
……
防抖的原理就是:你尽管触发事件,但是我一定在事件触发 n 秒后才执行,如果你在一个事件触发的 n 秒内又触发了这个事件,那我就以新的事件的时间为准,n 秒后才执行,总之,就是要等你触发完事件 n 秒内不再触发事件,我才执行,真是任性呐!
节流的原理:
如果你持续触发事件,每隔一段时间,只执行一次事件。
根据首次是否执行以及结束后是否执行,效果有所不同,实现的方式也有所不同。
我们用 leading 代表首次是否执行,trailing 代表结束后是否再执行一次。
关于节流的实现,有两种主流的实现方式,一种是使用时间戳,一种是设置定时器。
具体参考文章:
https://github.com/mqyqingfeng/Blog/issues/22
https://github.com/mqyqingfeng/Blog/issues/26
JS:防抖和节流
防抖和节流:
均是减少某一函数频繁执行消耗内存和资源的情况(减少执行次数)。
防抖:规定在多久时间内没有动作触发函数才执行该函数。
场景举例:用户滚轮滑动显示距离页顶的高度。
//显示页顶高度
function showTop(){
console.log(document.body.scrollTop||document.documentElement.scrollTop)
time = null;
}
//防抖函数
function rejectShook(){
var time = null;
return function(){
if(time==null){
//新建计时器,到时console
time = setTimeout(showTop,200)
}else{
//没到时间删除老计时器,新建另一计时器.
clearTimeout(timer);
time =setTimeout(showTop,200)
}
}
}
window.onscroll =rejectShook(showTop);
节流:类型于技能冷却,触发后一定时间不再触发
function showTop(){
console.log(document.body.scrollTop||document.documentElement.scrollTop;);
}
window.onscroll =lessRender();
function lessRender(){
//定义一个冷却,初始未冷却:false
var lique =false;
return function(){
//查询当前状态
if(lique){
return;~~~~
}else{
show();
lique = true;
//重新进入冷却,2s后可以再触发
setTimeout(()=>{lique=false},2000)
}
}
}
以上是关于JS篇(防抖/节流)的主要内容,如果未能解决你的问题,请参考以下文章