理想是火,点燃熄灭的灯。
先说说我理解的防抖和节流
在某一段时间内,某个事情只能做一次
比如浏览器的滚动触发事件:
正常滚动的时候 触发的频率是很高的
但是我们只想触发最后那一下 该如何解决呢?
基于上述场景,首先提出第一种思路:在第一次触发事件时,不立即执行函数,而是给出一个期限值比如200ms,然后:
效果:如果短时间内大量触发同一事件,只会执行一次函数。
实现:既然前面都提到了计时,那实现的关键就在于setTimeout
这个函数,由于还需要一个变量来保存计时
let timer = null if (timer) clearTimeout(timer); timer = setTimeout(() => { console.log("do someting"); }, 200);
很简单的几行代码,就实现了防抖
如果用我们玩游戏的时候 技能释放来理解,防抖就是现在服务器很卡很卡 我们一直按技能 没有显示cd倒计时!也没有释放技能
等过了一会 服务器缓过来了,技能释放出来了。。cd倒计时也开始了。。200ms就是我们的服务器延迟。。。
同样的,也是某个时间呢,某个事情只能做一次
节流跟防抖的不同区别就是:
还是拿游戏技能来形容,就是我们释放技能的cd倒计时,是不过节流是服务器无延迟的情况下
当时释放了某个技能之后,在cd结束之前,是无法再释放该技能的!
代码实现的话 其实比防抖多加了一个标实!
let timer = null; let valid = true; if (valid) { valid = false; console.log(event); } if (timer) clearTimeout(timer); timer = setTimeout(() => { valid = true; console.log("重置了 解锁了 可以继续调用"); }, 2000);
下课!
作者: Bill 本文地址: http://biaoblog.cn/info?id=1662346193577
版权声明: 本文为原创文章,版权归 biaoblog 个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇:设置数组上下区间