当前位置:网站首页>防抖和节流有什么区别,分别用于什么场景?
防抖和节流有什么区别,分别用于什么场景?
2022-07-30 18:40:00 【小萌新入场】

防抖
防抖:单位时间内多次点击,以最后一次为准。
形象的描述:王者里的回城,只要被打断就需要重新来(单位时间内,多次触发,且以最后一次为准)
例如:一个搜索输入框,用户不停的进行输入(这个时候就是抖动的过程),等用户输入停止之后,再触发搜索。
代码演示
function debounce(fn, delay = 200) {
let timer = 0
return function() {
// 如果这个函数已经被触发了
if(timer){
clearTimeout(timer)
}
timer = setTimeout(() => {
fn.apply(this, arguments); // 透传 this和参数
timer = 0
},delay)
}
}
节流
节流:单位时间内只触发一次,以第一次为准。
形象的描述下:想象一下王者荣耀的平a;或者技能CD冷却时间也好理解(单位时间内,只能触发一次,且以第一次为准)
例如:王者游戏里的英雄,你一个劲的使劲平a,会发现每次平a 过后都要短暂的停留一下,这就可以做到节流。
回归正题:drag(拖动)事件或者 scroll(滚动) 期间触发某个回调,要设置一个时间间隔。这时候就不能使用防抖了,为什么呢?
防抖是拖拽或者滚动结束之后才返回回调,但是我是需要在过程中进行触发回调,但是又不需要那么的频繁;这时候就使用节流函数,每隔一定的时间进行触发就好了!
代码演示
// 节流函数
function throttle(fn, delay = 200) {
let timer = 0
return function () {
if(timer){
return
}
timer = setTimeout(() =>{
fn.apply(this, arguments); // 透传 this和参数
timer = 0
},delay)
}
}
你可能会发现,防抖函数、节流函数很相似?
区别仅在于:
防抖:
if(timer){
clearTimeout(timer)
}
节流:
if(timer){
return
}
他们在定时器已经有任务的时候,操作不同。
防抖函数在每一次都有内容后进行清除,是为了保证当前执行的函数就是(当前规定的时间内)执行的最后一次操作
if(timer){
clearTimeout(timer)
}
节流函数如此操作是为了保证,在规定的时间内只会执行第一次这个操作
if(timer){
return
}
总结
遇到防抖,就想起王者荣耀里的 回城;
遇到节流,就想起王者荣耀里的 平a、技能cd冷却时间;

边栏推荐
猜你喜欢

生物医学论文有何价值 论文中译英怎样翻译效果好

Basic use of scrapy

运营 23 年,昔日“国内第一大电商网站”黄了...

Does the satellite phone communicate directly with the satellite or through a ground station?

ByteArrayInputStream class source code analysis

ESP8266-Arduino编程实例-DS18B20温度传感器驱动

基础架构之Mongo

图解LeetCode——11. 盛最多水的容器(难度:中等)

The sixteenth issue of eight-part article Balabala said (MQ)

Critical Reviews | 南农邹建文组综述全球农田土壤抗生素与耐药基因分布
随机推荐
第14章 类型信息
Mongo for infrastructure
时序数据库在船舶风险管理领域的应用
自然语言处理nltk
DM8: Single database and single instance to build a local data guard service
ESP8266-Arduino编程实例-DS18B20温度传感器驱动
OSPF详解(3)
6 yuan per catty, why do Japanese companies come to China to collect cigarette butts?
Codeblocks + Widgets 创建窗口代码分析
尊重客观事实
CCNA-网络汇总 超网(CIDR) 路由最长掩码匹配
What is the value of biomedical papers? How to translate the papers into Chinese and English?
The Meta metaverse division lost 2.8 billion in the second quarter!Still want to keep betting?Metaverse development has yet to see a way out!
【PHPWord】PHPOffice 套件之PHPWord快速入门
DM8:单库单实例搭建本地数据守护服务
你好,我的新名字叫“铜锁/Tongsuo”
微博广告分布式配置中心的构建与实践(有彩蛋)
使用postman调接口报Content type ‘text/plain;charset=UTF-8‘ not supported
kotlin的by lazy
AI基础:图解Transformer