戳蓝字"Web前端严选"关注我们哦!

手写防抖和节流

1.引言

「防抖和节流的产生」

浏览器的resize、scroll、keypress、mousemove操作时会频繁触发,如果我们在回调中计算元素位置、做一些跟DOM相关的操作,引起浏览器回流和重绘,频繁触发回调,很可能会造成浏览器掉帧,甚至会使浏览器崩溃,影响用户体验。针对这种现象,目前有两种常用的解决方案:防抖和节流。

2.防抖

function debounce(fn,delay){ let timer = null; return function(){  clearTimeout(timer);  timer = setTimeout(function(){   fn.call(this,...arguments)  },delay) }}

防抖:多次事件触发,只执行一次

举例形容一下,就是得帕金森的手去拿一杯水,虽然手抖动很多次,但是拿水的动作只执行一次

body.onscroll = debounce(function(){ console.log("防抖")},1000)

3.节流

function throttle(fn,delay){ let start = Date.now(); return function(){  let last = Date.now();  if(last - start > delay){   fn.apply(this,arguments);   start = last;  } }}

节流:事件触发,固定时间内执行一次

举例形容一下,就是水管每小时流2立方米水,节流减少到每小时流1立方米水

body.onscroll = throttle(function(){ console.log("节流")},1000)

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,我就嘤嘤嘤 -_-)

  2. 关注公众号【Web前端严选】,定期为你推送好文。

添加个人微信,进群与小伙伴一起玩耍(已经推出)~

点个在看,大家都看 

防抖 节流_面试必备考点:防抖与节流相关推荐

  1. 反向代理post参数怎么传输_面试必备:GET和POST的区别详细解说

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 最近一些小伙伴面试都会被问到 get 和 post 的区别,很多都只能简单的说几点,今天我们就来把弄的明明白白,彻彻底底. ...

  2. 游戏必备组件有哪些_面试必备:2019Vue经典面试题总结(含答案)

    点击右上方红色按钮关注"web秀",让你真正秀起来 面试必备:2019Vue经典面试题总结(含答案) 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写 ...

  3. mysql面试吗hi提_面试必备的10道MySQL题

    MySQL 事务,是我们去面试中高级开发经常会被问到的问题,很多人虽然经常使用 MySQL,SQL 语句也写得很溜,但是面试的时候,被问到这些问题,总是不知从何说起.下面我们先来了解一下什么是 MyS ...

  4. get请求可以传body吗_面试必备:GET和POST的区别详细解说

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 最近一些小伙伴面试都会被问到 get 和 post 的区别,很多都只能简单的说几点,今天我们就来把弄的明明白白,彻彻底底. ...

  5. 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器

    文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...

  6. oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...

    是新朋友吗?记得先点蓝字关注我哦- 今日课程菜单 Java全栈开发 | Web前端+H5 大数据开发 | 数据分析  人工智能+Python | 人工智能+物联网 进入数据时代,大数据技术成为互联网发 ...

  7. collection集合 多少钱_面试必备-Java集合框架

    Java集合框架面试题 常见集合 集合可以看作是一种容器,用来存储对象信息. 数组和集合的区别: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射 ...

  8. flex 左右布局_面试必考点:前端布局知识

    前端的页面布局知识是初中级前端工程师必须掌握的内容,在面试的时候无论大厂小厂都有很大概率被提问到,作为与页面最紧密的前端开发者,前端布局知识是必不可少的一环. 前言 这里所要介绍的布局知识主要是在解决 ...

  9. tcp报文格式_面试必备TCP(一):三次握手

    TCP大家都知道是什么东西,这个协议的具体报文格式如下: 标志位 URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据). PSH:为1表示是带有push标志的数据,指示接收方在接收到该报文 ...

最新文章

  1. 多线程EXecutor 柜架示例
  2. ionic3相关知识收集
  3. JMS(二):简单的JMS入门实例
  4. Swift - 多线程GCD详解
  5. SSM框架下log4j的配置和使用
  6. php测试号推送消息失败,信息发送失败是什么原因
  7. chrome inspect 远程调测:Chrome on Android之一 普通调试
  8. ELK应用之Filebeat
  9. 微信小程序踩坑- tabBar.list[3].selectedIconPath 大小超过 40kb
  10. html中引入另一个html
  11. Couldn‘t find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  12. 看完这个,让你分分钟搞定罗盘与加计校准!
  13. setw和width
  14. 颜色空间:RGB,CMY,HSV,HSL,Lab,YUV详解
  15. 传感器的应用/SurfaceView/制作简单的指南针
  16. 未成熟男人; 成熟男人
  17. jsp_asp_php,PHP/JSP/ASP
  18. uniapp基础项目
  19. js的for循环中return可以跳出循环,而使用forEach等不可以跳出循环
  20. 小学生可以学的计算机课程,如何上好小学计算机课 (参评)

热门文章

  1. application context not configured for this file?
  2. pcss评分_GTA5画质设置 N卡画质选项设置指南
  3. mq 接口 java_Rabbitmq Java Client Api详解
  4. 浏览器本地mysql_IndexedDB:浏览器里的本地数据库
  5. 悬停渐变特效html,CSS3 transition属性实现hover渐变动画效果
  6. mysql 结构对比工具_Mysql 数据库结构 对比工具
  7. 进程间通信的方式(四):信号量
  8. 列举ospf的5种报文类型_这5种“专升本”你都知道吗?那个含金量更高呢?报考如何选择?...
  9. 如何听节拍器_我是如何开垮一家琴行的!
  10. 详解Linux多线程编程