位置: IT常识 - 正文

JS防抖和节流(js防抖节流的区别和使用场景)

编辑:rootadmin
JS防抖和节流 前言

推荐整理分享JS防抖和节流(js防抖节流的区别和使用场景),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js防抖和节流的应用场景,js防抖和节流的区别,js防抖和节流的区别,js防抖和节流面试题,js防抖和节流代码,Js防抖和节流的实现,js防抖和节流 区别及实现方式,js防抖和节流 区别及实现方式,内容如对您有帮助,希望把文章链接给更多的朋友!

在进行窗口的操作或者输入框操作时,如果事件处理函数用的频率无限制,会加重浏览器和服务器的负担,此时我们就可以用防抖(debounce)和节流(throttle)的方式来减少调用频率,同时又不影响实际效果。

什么是防抖和节流?

防抖:在设定的时间内触发一次事件,会在设定的时间结束之后执行该事件处理程序,如果在设定的时间内多次触发事件,则每次触发事件都会重新计时。(可以将防抖类比成电梯:第一个人进电梯之后,电梯会在5秒之后自动关闭电梯门,如果在这5秒内又有人进来了,那么电梯会重新等待5秒后再关门。)

简单理解就是:单位时间内,频繁触发一个事件,以最后一次触发为准。

节流:在设定的时间内多次触发事件,只会在设定的时间结束后执行一次。

简单理解就是:单位时间内,频繁触发一个事件,只会触发一次。

防抖的应用场景: 主要用来监听input输入框:我们在搜索内容的时候一般都会有搜索提示,它是通过input事件获取用户输入的内容,然后发送数据请求给后端,后端返回搜索提示内容。我们希望等待用户输入结束之后再发送请求,而不是输入一个发一次请求,这时候就需要使用防抖函数来实现。

节流的应用场景:

监听scroll滚动事件、按钮点击等等

如何实现防抖和节流?

防抖主要使用定时器来实现:

//func 是事件处理程序,delay 是事件执行的延迟时间,单位:毫秒 function debounce(func, delay){ var timer = null; return function(){ var that = this; var args = arguments //每次触发事件 都把定时器清掉重新计时 clearTimeout(timer) timer = setTimeout(function(){ //执行事件处理程序 func.call(that, args) }, delay) } }JS防抖和节流(js防抖节流的区别和使用场景)

例子:

(1)不使用防抖函数:

<body> <input type="text"> <script> var inp = document.getElementsByTagName('input')[0] //获取输入框的输入内容 inp.oninput = function(){ console.log(this.value); } </script></body>

(2)使用防抖函数:

<body> <input type="text"> <script> function debounce(func, delay){ var timer = null; return function(){ var that = this; var args = arguments clearTimeout(timer) timer = setTimeout(function(){ func.call(that, args) }, delay) } } var inp = document.getElementsByTagName('input')[0] function handler(){ console.log(this.value); } inp.addEventListener('input', debounce(handler, 1000)) </script></body>

节流的实现有两种方式:

1、使用时间戳实现

//func 是事件处理程序,delay 是事件执行的延迟时间,单位:毫秒 function throttle(func, delay){ //定义初始时间(开始触发事件的时间) var start = 0; return function(){ var that = this; var args = arguments; //获取当前时间戳 var current = Date.now(); // 判断当前时间与初始时间是否超过间隔 if(current - start >= delay){ //执行事件处理程序 func.call(that, args) //更新初始时间 start = current; } } }

2、使用定时器实现

function throttle(func, delay){ var timer = null; return function(){ var that = this; var args = arguments if(!timer){ timer = setTimeout(function(){ //执行事件处理程序 func.call(that, args) //事件执行完后把定时器清除掉,下次触发事件的时候再设置 timer = null; }, delay) } } }

例子:

(1)不使用节流函数

<body> <div style="height: 500px; width: 300px; background-color: rgb(244, 199, 207);"></div> <div style="height: 500px; width: 300px; background-color: rgb(239, 131, 16);"></div> <div style="height: 500px; width: 300px; background-color: rgb(11, 66, 194);"></div> <div style="height: 500px; width: 300px; background-color: rgb(177, 21, 244);"></div> <div style="height: 500px; width: 300px; background-color: rgb(75, 180, 115);"></div> <div style="height: 500px; width: 300px; background-color: rgb(163, 122, 150);"></div> <div style="height: 500px; width: 300px; background-color: rgb(39, 34, 35);"></div> <div style="height: 500px; width: 300px; background-color: rgb(209, 218, 40);"></div> <div style="height: 500px; width: 300px; background-color: rgb(63, 179, 215);"></div> <script> function handler(){ console.log('页面发生了滚动'); } document.addEventListener('scroll', handler) </script></body>

(2)使用节流函数

<body> <div style="height: 500px; width: 300px; background-color: rgb(244, 199, 207);"></div> <div style="height: 500px; width: 300px; background-color: rgb(239, 131, 16);"></div> <div style="height: 500px; width: 300px; background-color: rgb(11, 66, 194);"></div> <div style="height: 500px; width: 300px; background-color: rgb(177, 21, 244);"></div> <div style="height: 500px; width: 300px; background-color: rgb(75, 180, 115);"></div> <div style="height: 500px; width: 300px; background-color: rgb(163, 122, 150);"></div> <div style="height: 500px; width: 300px; background-color: rgb(39, 34, 35);"></div> <div style="height: 500px; width: 300px; background-color: rgb(209, 218, 40);"></div> <div style="height: 500px; width: 300px; background-color: rgb(63, 179, 215);"></div> <script> function throttle(func, delay){ var timer = null; return function(){ var that = this; var args = arguments if(!timer){ timer = setTimeout(function(){ //执行事件处理程序 func.call(that, args) //事件执行完后把定时器清除掉,下次触发事件的时候再设置 timer = null; }, delay) } } } function handler(){ console.log('页面发生了滚动'); } document.addEventListener('scroll', throttle(handler, 1000)) </script></body>

 

本文链接地址:https://www.jiuchutong.com/zhishi/300886.html 转载请保留说明!

上一篇:不会安装系统怎么办?安装操作系统问题盘点(装系统如何不安装自带软件)

下一篇:Win11 Release 预览版 Build 22000.1879更新补丁KB5025298(附更新修复内容汇总)(window11预览版怎么样)

  • oppo reno旗舰版有哪几个版本(oppo旗舰版手机系列)

    oppo reno旗舰版有哪几个版本(oppo旗舰版手机系列)

  • 抖音如何增加粉丝(抖音如何增加粉丝量和关注度)

    抖音如何增加粉丝(抖音如何增加粉丝量和关注度)

  • 是不是充了话费就有流量了(是不是充话费送的)

    是不是充了话费就有流量了(是不是充话费送的)

  • 帮别人微信实名认证有什么风险(帮别人微信实名认证会怎么样)

    帮别人微信实名认证有什么风险(帮别人微信实名认证会怎么样)

  • 尊享版是什么意思(尊享版和普通版有什么区别)

    尊享版是什么意思(尊享版和普通版有什么区别)

  • 电脑需要激活windows是什么意思(电脑需要激活windows需要多少费用)

    电脑需要激活windows是什么意思(电脑需要激活windows需要多少费用)

  • 新电脑开机需要做什么(新电脑开机需要检查什么)

    新电脑开机需要做什么(新电脑开机需要检查什么)

  • 手机卡销户是什么意思(手机卡销户什么时候办理)

    手机卡销户是什么意思(手机卡销户什么时候办理)

  • qq拉黑后对方发信息显示什么(qq拉黑后对方发信息显示什么内容)

    qq拉黑后对方发信息显示什么(qq拉黑后对方发信息显示什么内容)

  • 华为笔记本13和14的区别(华为笔记本13和13s的区别)

    华为笔记本13和14的区别(华为笔记本13和13s的区别)

  • ipad2为什么不能下载(ipad2为什么不能下载微信)

    ipad2为什么不能下载(ipad2为什么不能下载微信)

  • opporeno2与opporeno2z有什么不同(opporeno2与opporeno2z那个屏幕大)

    opporeno2与opporeno2z有什么不同(opporeno2与opporeno2z那个屏幕大)

  • 除号在键盘上怎么打(除号在键盘上怎么打快捷键)

    除号在键盘上怎么打(除号在键盘上怎么打快捷键)

  • 华为手机怎么查看激活时间(华为手机怎么查使用了多长时间)

    华为手机怎么查看激活时间(华为手机怎么查使用了多长时间)

  • 快手如何看别人私密(快手如何看别人动态)

    快手如何看别人私密(快手如何看别人动态)

  • icloud空间已满什么意思(解决icloud空间已满)

    icloud空间已满什么意思(解决icloud空间已满)

  • 计算机紧急应用小组的简称是什么(计算机应急响应小组的简称是什么)

    计算机紧急应用小组的简称是什么(计算机应急响应小组的简称是什么)

  • plctl00是什么型号(plc-al00什么型号)

    plctl00是什么型号(plc-al00什么型号)

  • windowsxp怎么升级7

    windowsxp怎么升级7

  • 苹果手机屏幕没有时间显示怎么办(苹果手机屏幕没有app显示)

    苹果手机屏幕没有时间显示怎么办(苹果手机屏幕没有app显示)

  • 旺旺名是什么在哪里看(旺旺名叫什么大气一点)

    旺旺名是什么在哪里看(旺旺名叫什么大气一点)

  • 腾讯电脑管家怎么清除痕迹?(腾讯电脑管家怎么修复dll)

    腾讯电脑管家怎么清除痕迹?(腾讯电脑管家怎么修复dll)

  • 织梦dedecms文章页实现多个缩略图的方法(织梦网站怎么添加关键词)

    织梦dedecms文章页实现多个缩略图的方法(织梦网站怎么添加关键词)

  • 小企业一定要买五险吗
  • 财务报表一季度销售大福下降
  • 承兑汇票私人贴现要多久
  • 印花税票吧
  • 坏账核销计入营业利润吗
  • 税收优惠退税账户是什么
  • 收付转凭证如何排序装订
  • 独立核算分公司注销需要清算吗
  • 换件维修的部件什么意思
  • 以物易物差价印花税
  • 收了公司的款项不拿回公司属于什么行为
  • 一个员工在两家公司上班违法吗
  • 小规模纳税人当月超过500万的部分怎么申报
  • 税控盘怎么使用
  • 期末未缴税额是负数用于抵扣如何填报
  • 撤销实收资本会怎么样
  • 会计核算中利润包括哪些
  • 个税汇算清缴申报错误怎么办
  • 利得和损失计入哪里
  • Laravel 5.4中migrate报错: Specified key was too long error的解决
  • win10资源管理器在哪里找
  • 分批供货付款方式
  • 笔记本屏幕清洁剂推荐
  • vue3.0解决跨域
  • php 读取文本文件
  • 计提利息会计分录怎么做
  • 发票怎么保管不会坏
  • 支付水电费增值税账务处理
  • 加计扣除减免政策
  • 公司哪些支出费用可以扣
  • 没有公网ip如何实现外网访问路由器
  • es6体验
  • 无形资产的转让
  • 微信收款怎么做会计分录
  • 收到银行承兑汇票
  • 企业折旧申报备案怎么写
  • 债务重组开场白
  • 取得增值税
  • 织梦官方网站
  • 所得税汇算清缴前取得跨年发票
  • 转回存货跌价准备的会计分录
  • 购买债券的利息会计分录
  • 开票一定要确认收入嘛
  • sqlserver创建维护计划
  • 实收资本与资本公积之和小于实收资本
  • 公司利润如何提取避税
  • 端午节发放的现金福利会计处理
  • 固定资产怎么入费用
  • 企业的应付职工薪酬属于流动负债
  • 单位食堂收费制度
  • 申报系统中印花税报表怎么填
  • 非流动资产减少
  • 百旺金赋领回来的发票怎么读入
  • 微软的定时炸弹就是Windows XP
  • Windows 7 RTM、Vista、XP 性能测试
  • os x 10.10 yosemite自动纠正怎么关?os x yosemite自动纠正功能关闭教程
  • winxp网络连接没有无线网络
  • win8如何输入命令
  • linux怎么把网卡down
  • shell在linux
  • Win10 Mobile 14283红石预览版有哪些机型可以安装?
  • win8取消自动更新
  • 事件委托实现
  • javascript数据结构与算法第三版
  • javascript函数大全
  • nodejs require 路径查找
  • js 字符编码
  • 如何调试自己的情绪
  • python文件管理系统难点总结
  • 安卓自动登录应用程序
  • js验证正则表达式
  • 风力发电税收优势分析
  • 广州市税务局机构设置
  • 国家税务总局政策法规司
  • 个体户注销税盘需要公章吗
  • 期初未缴税额是什么意思
  • 浙江省个体工商户税收政策
  • 简易计税方法开的是普票还是专票
  • 陕西电子发票开票流程?
  • 文件清理规则
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设