1.谈一谈防抖与节流?有什么区别?如何实现?

  • 定义

    • 所谓防抖,就是指触发事件后,在 n 秒后函数才会执行,如果在 n 秒内又触发了事件,则会重新计算函数执行时间

    • 所谓节流,就是指连续触发事件,但是在 n 秒中只执行一次函数

  • 区别

    • 函数节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件后才触发一次函数

  • 使用场景

    防抖:

    • 搜索框搜索输入。只需用户最后一次输入完,再发送请求

    • 手机号、邮箱验证输入检测

    • 窗口大小Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染

    节流:

    • 滚动加载,加载更多或滚到底部监听

    • 谷歌搜索框,搜索联想功能

    • 高频点击提交,表单重复提交

2.防抖的使用 例:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>防抖与节流</title><style>.box {width: 200px;height: 200px;overflow: auto;}</style>
</head><body><div class="box" id="container"><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p></div>
</body>
<script type="text/javascript">// 当连续触发scroll事件,handle函数只会在1秒时间内执行一次,在如果继续滚动执行,就会清除定时器,重新计时。相当于就是多次执行,只执行一次。function debounce(fn, wait) {var timeout = null;// 使用闭包,缓存变量return function () {if (timeout !== null) {console.log('清除定时器啦')clearTimeout(timeout);  //清除这个定时器}timeout = setTimeout(fn, wait);}}// 处理函数function handle() {console.log(Math.random());}var container = document.getElementById('container')container.addEventListener('scroll', debounce(handle, 1000));
</script></html>

3.节流的使用 例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>防抖函数</title><style>.box {width: 200px;height: 200px;overflow: auto;}</style>
</head><body><div class="box" id="container"><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p><p>节流演示</p></div>
</body>
<script>// 在前端开发中会遇到一些频繁的事件触发,比如:   1000/200= 5ms;// window 的 resize(窗口大小)、scroll(滚动)// mousedown、mousemove// keyup、keydown// ……// 前端开发中,我们常常会去监听滚动事件或者用户输入框验证事件,如果事件处理没有频率限制,就会加重浏览器的负担,影响用户的体验感,// 因此,我们可以采取防抖(debounce)和节流(throttle)来处理,减少调用事件的频率,达到较好的用户体验。// throttle 节流     指定时间间隔内只会执行一次任务;// 节流的原理很简单:  如果你持续触发事件,每隔一段时间,只执行一次事件。// 关于节流的实现,有两种主流的实现方式,一种是使用时间戳,一种是设置定时器。// 场景很多,常见的有:// 屏幕尺寸变化时页面内容的变动,执行相应逻辑;// 监听鼠标滚动时间,执行相应逻辑;// 监听重复点击时的时间,执行相应逻辑// 规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。// 在节流函数内部使用开始时间prev、当前时间now和剩余时间remain,当剩余时间小于等于0意味着执行处理函数,这样保证第一次就能立即执行函数并且每隔delay时间执行一次;function throttle(func, delay) {var timer = null; // 使用闭包,缓存变量var prev = Date.now(); // 最开始进入滚动的时间return function () {var context = this;   // this指向windowvar args = arguments;var now = Date.now();var remain = delay - (now - prev); // 剩余时间clearTimeout(timer);// 如果剩余时间小于0,就立刻执行if (remain <= 0) {func.apply(context, args);prev = Date.now();} else {timer = setTimeout(func, remain);}}}// 处理的函数function handle() {console.log(Math.random());}var container = document.getElementById("container");container.addEventListener("scroll", throttle(handle, 3000))//20次    真实需求中   一秒调依次函数就足够了   怎么办?</script></html>

一篇让你彻底明白防抖和节流以及应用场景相关推荐

  1. 防抖和节流以及应用场景

    防抖 是将多次执行变为最后一次执行,比如百度搜索,就应该用防抖,当我连续不断输入时,不会发送请求:当我一段时间内不输入了,才会发送一次请求:如果小于这段时间继续输入的话,时间会重新计算,也不会发送请求 ...

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

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

  3. JavaScript防抖与节流的具体实现及使用场景

    文章目录 前言 一.什么是防抖和节流? 二.防抖 简单介绍 图解 代码如下(示例): 二.节流 简单介绍 图解 代码如下(示例): 三.防抖与节流的使用场景 总结 前言 最近遇到注册登陆按钮需要添加防 ...

  4. 防抖和节流——lodash插件

    首先了解一下什么是防抖.节流 防抖:当前的所有的触发都被取消,最后一次在规定时间内才会触发,即如果连续快速触发,只会执行一次. 节流:把频繁的触发变为少量的触发,可以给浏览器充裕的时间解析代码 防抖就 ...

  5. “约见”面试官系列之常见面试题第二十一篇之函数防抖和节流(建议收藏)

    目录 前言 概念 函数防抖(debounce) 函数节流(throttle) 常见应用场景 函数防抖的应用场景 函数节流的应用场景 实现原理 函数防抖(debounce) 函数节流(throttle) ...

  6. postgresql 怎么读_大数据采集和抽取怎么做?这篇文章终于说明白了!

    本文来源于公众号[胖滚猪学编程],转载请注明出处! 关于数据中台的概念和架构,我们在大白话 六问数据中台和数据中台全景架构及模块解析!一文入门中台架构师!两篇文章中都说明白了.从这一篇文章开始分享中台 ...

  7. 前端战五渣学JavaScript——防抖、节流和rAF

    看了<JavaScript高级程序设计>和网上的一些博客,感觉对函数节流和函数防抖的概念是反的,以下我写的关于防抖和节流的概念取决于多数人的概念吧,并且基于伦敦前端工程师David Cor ...

  8. 防抖 节流_关于防抖和节流

    虾扯蛋之函数防抖和节流 - 掘金 先贴贴 这个哥们的. 因为我看了很多,感觉大多都是复制.没有啥思考 在介绍以下这些问题的时候.先公示下我思考的时候出现的问题 1.如果你使用 onclick 和 ad ...

  9. 防抖 节流_每日一题手写函数防抖与节流

    关注"前端学苑" ,坚持每天进步一点点 「~函数防抖与节流 ~」 每日一题,希望让爱学习.思考的前端技术伙伴在一起学习.复盘.成长. 基础知识要夯实,原理源码要深入,深度广度要扩展 ...

最新文章

  1. SURF 特征检测及匹配
  2. 利用libswscale转换yuyv422到yuv422p或rgb之间的转换, 视频翻转
  3. 录音转成文字 android,安卓手机自带的录音转文字功能这么强大,堪称会议神器!你会用吗...
  4. css实现快速抖动效果_web前端入门到实战:CSS实现照片堆叠效果
  5. vue项目接口地址暴露_vue项目打包后可以配置接口地址的方法
  6. Linux中进行用户UID测试导致系统报错
  7. 12.4scrum report
  8. Yarn调度器和调度算法(FIFO、容量调度器 与 公平调度器)
  9. IOT---(4)物联网平台架构设计
  10. dotnetfx40lp 不能安装在d盘_使用小白一键重装系统给电脑安装双系统教程
  11. 计算机职称考试如何知道这道题对错,职称计算机考试Excel判断试题2017
  12. 实验七 构件图和部署图
  13. 深度学习----HOI人物交互算法:ICAN
  14. UBUNTU-Mplay
  15. 程序员眼中的中国传统文化-王阳明《传习录》16
  16. 【Android 进阶】开发APP常见的错误
  17. zoho邮箱收费和免费区别_使用Zoho Reports和XML在云中探索分析
  18. php编写蜘蛛池站群教程,快车蜘蛛池站群程序 v2.0
  19. EB Tresos 入门指南
  20. 模态振型的一些概念解释

热门文章

  1. 记录自己考研二战失败后找工作的经历
  2. [从头读历史] 第271节 诗经 郑风
  3. 微信开放平台与公众平台授权区别
  4. PC机主板常见故障分析和排除
  5. 机器学习系列:大规模机器学习(Large Scale Machine Learning)
  6. 2022电商行业重磅年度报告:八大年度关键词盘点
  7. SAP-MM预制发票那些事
  8. vuejs视图不能及时更新的问题 ,深入响应式原理
  9. 如何使Android录音实现内录功能
  10. java bookkeeping_Java - ExecutorService shutdown系列方法 的理解