防抖(debounce)和节流(throttle)是在 高频次调用函数 的场景下,常用的解决方案了。故名思意,可以节省开销,优化体验。


二者的区别:

防抖:

我们让想要执行的函数只在最后一次调用完一小段时间后执行对应函数。一连串动作结束后,执行 一次

节流:

我们让想要执行的函数不管调用多频繁,都隔一小段时间执行一次。一连串动作中,固定 隔一阵子执行一次


实现的原理其实都还是定时器 setTimeout,实现步骤也很简单,代码贴在下面:

 1 // 防抖
2 function debounce(fn, delay = 500) {
3 let timer = null;
4 return function (...params) {
5 if (timer) {
6 clearTimeout(timer);
7 }
8 timer = setTimeout(() => {
9 fn.apply(this, params)
10 timer = null
11 }, delay)
12 }
13 }
14 // 节流
15 function throttle(fn, delay = 500) {
16 let timer = null;
17 return function (...params) {
18 if (timer) {
19 return;
20 }
21 timer = window.setTimeout(() => {
22 fn.apply(this, params);
23 timer = null;
24 }, delay);
25 }
26 }

调用时只需要对想执行的函数外面包一层就行了,例如滚动条改变监听事件:

1 window.addEventListener('scroll', debounce(function (e) {
2 console.log(document.documentElement.scrollTop);
3 }, 300));

第一个参数是执行函数,第二个参数是限制时间。


函数防抖与节流 - js的更多相关文章

  1. js高阶函数应用—函数防抖和节流

    高阶函数指的是至少满足下列两个条件之一的函数: 1. 函数可以作为参数被传递:2.函数可以作为返回值输出: javaScript中的函数显然具备高级函数的特征,这使得函数运用更灵活,作为学习js必定会 ...

  2. vue函数防抖和节流

    Vue函数防抖和节流https://zhuanlan.zhihu.com/p/72363385 <template> <div> <input type='text' v ...

  3. js函数防抖、节流实现

    防抖 Debounce 函数防抖就是,延迟一段时间再执行函数,如果这段时间内又触发了该函数,则延迟重新计算: // 简单实现 function debounce(fn, wait) { let t r ...

  4. JavaScript中函数防抖、节流

    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14565642.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...

  5. js中的函数防抖与节流

    一.滚动条监听的例子 写一个功能需求-- 监听浏览器滚动事件,返回当前滚条与顶部的距离,代码如下: function showTop () { var scrollTop = document.bod ...

  6. “浅入浅出”函数防抖(debounce)与节流(throttle)

    函数防抖与节流是日常开发中经常用到的技巧,也是前端面试中的常客,但是发现自己工作一年多了,要么直接复用已有的代码或工具,要么抄袭<JS高级程序设计>书中所述"函数节流" ...

  7. 2019 面试准备 - JS 防抖与节流 (超级 重要!!!!!)

    Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 你们的 star 是我学习的动力!GitHub 地址 本文涉及知识点: 防抖与节流 重绘与回流 浏览器解析 URL DNS 域名解析 ...

  8. 因为它,我差点删库跑路:js防抖与节流

    前言 前端踩雷:短时间内重复提交导致数据重复. 对于前端大佬来说,防抖和节流的技术应用都是基本操作.对于"兼职"前端开发的来说,这些都是需要躺平的坑. 我们今天就来盘一盘js防抖与 ...

  9. 【Vue项目】商品汇前台(二)进度条插件+Vuex模块化仓库+函数的防抖与节流+路由传参

    前言 1 nprogress进度条的使用 当请求发出进度条出现并向前走,请求成功后进度条消失.nprogress是一种进度条插件 1.1 nprogress进度条插件安装 npm i --save n ...

  10. JS的防抖与节流学习笔记

    防抖(debounce):当持续触发事件时,在一定的时间段内,只有最后一次触发的事件才会执行. 例: function debounce(fn, wait) { var timer = null; r ...

随机推荐

  1. 在 CMake 中使用 Qt windeploy 进行 install

    install(TARGETS app BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINA ...

  2. java项目实战-jdbc实现-书城的增删改查-day21

    目录 1. 安装mysql 安装navicate 2. jdbc实现增删改查 1. 安装mysql 安装navicate 参考网上资料 创库 创表 并放入3条测试数据 2. jdbc实现增删改查 bo ...

  3. Spring Boot 中使用Caffeine缓存的简单例子

    Caffeine 缓存是 Java 的高性能缓存库.本文简单记录下 Caffeine 缓存的用法. 依赖配置 <dependencies> <dependency> <g ...

  4. 基于taro搭建小程序多项目框架

    前言 为什么需要这样一个框架,以及这个框架带来的好处是什么? 从字面意思上理解:该框架可以用来同时管理多个小程序,并且可以抽离公用组件或业务逻辑供各个小程序使用.当你工作中面临这种同时维护多个小程序的 ...

  5. Angular系列教程之依赖注入详解

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. APB Slave Design

    APB Slave Design module apb_slave #( REG1_ADDR = 8'h00, REG2_ADDR = 8'h04, REG3_ADDR = 8'h08 ) ( // ...

  7. 【RTOS】基于RTOS的降低功耗的策略

    RTOS中降低功耗的策略 Saving Power with an RTOS 介绍 随着绿色节能产品需求的增加,快速增长的移动设备,其电池寿命最受关注,设计者必须要考虑在其设计中如何最大限度的降低功耗 ...

  8. [转帖]shell编程:变量的数值计算实践(五)

    https://www.cnblogs.com/luoahong/articles/9224495.html 算术运算符 变量的数值(整数)计算   1)(())用法:(此方法很常用)** 范例:sh ...

  9. 将自签名创建的ca证书 添加到linux的授信证书列表的办法

    第一步: 将ca 证书 从cert 格式转换成pem格式 openssl x509 -in ca.crt -out ca.pem -outform PE 第二步: 将ca 证书导入至系统中来 cat ...

  10. js赋值的两种方式

    第一种 let obj=[ { value:undefined } ] obj[0].value.value='zahngsan' obj[0].value.label='张三' 机智的小伙伴,可能已 ...