防抖debounce装饰器

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

function debounce(func, delay) {
let isCooldown = false;
return function() {
if (isCooldown) return;
func.apply(this, arguments);
isCooldown = true;
setTimeout(() => isCooldown = false, delay);
};
}

节流throttle装饰器

规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

function throttle(func, delay) {

  let isThrottled = false,
savedArgs,
savedThis; function wrapper() { if (isThrottled) { // (2)
savedArgs = arguments;
savedThis = this;
return;
} func.apply(this, arguments); // (1) isThrottled = true; setTimeout(function() {
isThrottled = false; // (3)
if (savedArgs) {
wrapper.apply(savedThis, savedArgs);
savedArgs = savedThis = null;
}
}, delay);
} return wrapper;
}

2者区别:

  • 函数防抖和函数节流都是防止某一时间频繁触发,但是这两兄弟之间的原理却不一样。
  • 函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行。

应用场景:

  • debounce

    •   search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
    •   window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次。
  • throttle
    •   鼠标不断点击触发,mousedown(单位时间内只触发一次)。
    •   监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。

参考文档:

装饰和转发,call/apply

7分钟理解JS的节流、防抖及使用场景

最新文章

  1. 关于QImage提取单色通道方法(vector)
  2. C#软件设计——小话设计模式原则之:单一职责原则SRP
  3. 定时任务-在spring中配置quartz
  4. Dynamics Webservice Call with Credential
  5. Windows驱动开发(中间层)
  6. spring mvc注解@RequestParam
  7. uva 10972 RevolC FaeLoN cdoj 方老师和农场
  8. opencv 边缘羽化,边缘过渡
  9. 关于pthread_create未定义的引用的奇葩解决
  10. 20160212.CCPP体系详解(0022天)
  11. 大数据征信的应用和启示:ZestFinance的基于大数据的信用评估技术
  12. kettle基础概念的学习
  13. 自行搭建私有云kodexplorer
  14. 基于C#的socket编程的TCP异步实现
  15. Java Base64位加密和解密(包括其他加密参考)
  16. luogu P4491 [HAOI2018]染色
  17. vue工具知识
  18. 【拓扑 字符串还原 + 线段树维护】奇洛金卡达(father)
  19. 利用LD_PRELOAD hook代码
  20. 再学Java 之 Integer 包装类缓存

热门文章

  1. MYSQL --Subquery returns more than 1 row查询结果多于一行
  2. Python中使用@的理解
  3. [终极巨坑]golang+vue开发日记【二】,登陆界面制作(一)
  4. AOP & 拦截器
  5. 2019 年在 Raspberry Pi 「树莓派」上运行的 10 个操作系统推荐
  6. SQL server字符串分割成表-表分割为字符串
  7. 使用poi调整字体格式、添加单元格注释、自动调整列宽
  8. igel udc2 config
  9. in __init__ self._traceback = tf_stack.extract_stack()的一个原因
  10. python抓取贝壳房源信息