位置: 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预览版怎么样)

  • 天猫精灵怎么重新连其他Wi-Fi(天猫精灵怎么重新配对)

    天猫精灵怎么重新连其他Wi-Fi(天猫精灵怎么重新配对)

  • 网络cup是什么意思(cup是啥意思呀)

    网络cup是什么意思(cup是啥意思呀)

  • 大疆御air手柄如何充电(大疆御pro手柄说明书)

    大疆御air手柄如何充电(大疆御pro手柄说明书)

  • 苹果se升级ios13后耗电快(苹果se升级15.7.6)

    苹果se升级ios13后耗电快(苹果se升级15.7.6)

  • 手机外放没有声音但是耳机有声(手机外放没有声音修理多少钱)

    手机外放没有声音但是耳机有声(手机外放没有声音修理多少钱)

  • 音轨窗口中R键的功能是什么(音轨窗口中r键是什么)

    音轨窗口中R键的功能是什么(音轨窗口中r键是什么)

  • 小果qq软件干什么用的?(qq小软件下载)

    小果qq软件干什么用的?(qq小软件下载)

  • 小米笔记本开机黑屏(小米笔记本开机密码忘记了怎么打开)

    小米笔记本开机黑屏(小米笔记本开机密码忘记了怎么打开)

  • 荣耀v30发热严重怎么办(荣耀v30发热严重怎么回事)

    荣耀v30发热严重怎么办(荣耀v30发热严重怎么回事)

  • 打印机e1是什么故障(打印机出现e1打印不了怎么解决)

    打印机e1是什么故障(打印机出现e1打印不了怎么解决)

  • 红米k30pro自带贴膜吗(红米k30pro手机贴膜教程)

    红米k30pro自带贴膜吗(红米k30pro手机贴膜教程)

  • 手机屏划不动点不了怎么办(手机划不动该怎么办?屏幕失灵该怎么办?)

    手机屏划不动点不了怎么办(手机划不动该怎么办?屏幕失灵该怎么办?)

  • 隐藏wifi后自己怎么连接手机(隐藏wifi后自己电脑怎么连)

    隐藏wifi后自己怎么连接手机(隐藏wifi后自己电脑怎么连)

  • 知乎的邀请是随机的吗(知乎邀请好友有什么奖励)

    知乎的邀请是随机的吗(知乎邀请好友有什么奖励)

  • 京东钢镚怎么获得(京东钢镚怎么买东西)

    京东钢镚怎么获得(京东钢镚怎么买东西)

  • hdmi连接电脑和电视显示无信号怎么办(HDMI连接电脑和显示器,电脑键鼠可以操控显示器吗?)

    hdmi连接电脑和电视显示无信号怎么办(HDMI连接电脑和显示器,电脑键鼠可以操控显示器吗?)

  • 快手怎么直播播放视频(快手怎么直播播放音乐让大家听)

    快手怎么直播播放视频(快手怎么直播播放音乐让大家听)

  • 荣耀v30pro5g是屏幕指纹吗(荣耀v30pro屏幕是)

    荣耀v30pro5g是屏幕指纹吗(荣耀v30pro屏幕是)

  • 钢化膜有气泡对手机屏幕有影响吗(钢化膜有气泡对眼睛有影响吗)

    钢化膜有气泡对手机屏幕有影响吗(钢化膜有气泡对眼睛有影响吗)

  • 怎么恢复qq聊天记录(怎么恢复qq聊天记录的内容)

    怎么恢复qq聊天记录(怎么恢复qq聊天记录的内容)

  • 天猫精灵怎么连接蓝牙(天猫精灵怎么连接手机)

    天猫精灵怎么连接蓝牙(天猫精灵怎么连接手机)

  • 荣耀20s摄像头品牌(华为荣耀20摄像头介绍)

    荣耀20s摄像头品牌(华为荣耀20摄像头介绍)

  • 苹果耳机怎么兼容安卓(苹果耳机怎么兼容蓝牙)

    苹果耳机怎么兼容安卓(苹果耳机怎么兼容蓝牙)

  • 钉钉打卡定位不准怎么修改(钉钉打卡定位不对怎么改)

    钉钉打卡定位不准怎么修改(钉钉打卡定位不对怎么改)

  • 华为p10来电背景设置(华为手机来电显示背景)

    华为p10来电背景设置(华为手机来电显示背景)

  • ensmix32.exe进程安全吗 ensmix32进程是什么文件产生的

    ensmix32.exe进程安全吗 ensmix32进程是什么文件产生的

  • webpack之常见性能优化(webpack常用属性)

    webpack之常见性能优化(webpack常用属性)

  • java多线程之线程的六种状态(java多线程线程数控制在多少)

    java多线程之线程的六种状态(java多线程线程数控制在多少)

  • 运输费用怎么计算出来
  • 小型微利企业所得税率
  • 城市维护建设税的计税依据是什么
  • 残保金退回属于什么业务
  • 外购货物用于什么不得抵扣进项
  • 企业的培训费会计分录
  • 其他综合收益税后
  • 残疾人就业保障金申报时间
  • 待摊费用可以转入固定资产吗
  • 期初应收帐款
  • 专利权转让的净收益计入
  • 公司支付员工团建费没有发票怎么录账
  • 委托代理合同后果的承担
  • 土地租赁需要交土地使用税吗
  • 商业承兑汇票背书转让流程图
  • 税收筹划要注意哪些问题
  • 变更税务登记证法人需要哪些资料
  • 增值税加计抵减账务处理
  • 送礼没有发票怎么解决
  • 建安类增值税专用发票什么时候改的
  • 企业的业务招待费多了好还是少了好
  • 生产要素和资源的区别和联系
  • 补发工资如何缴纳工人所得税的法条
  • 公司的电话费计入什么科目
  • 所有者权益类科目借贷方向
  • 应付利息和应计利息怎么区分
  • 技术服务的大类包括
  • windows10桌面右键没反应
  • 企业预收账款缴哪些税
  • php递归函数遍历数组
  • downloadplus.exe是什么进程 作用是什么 downloadplus进程是安全的吗
  • 公司撤股后还要担责任吗
  • 发票开了对方未付款
  • 哪些人可以享受二级医保
  • ctfmon.exe文件在哪
  • 承兑汇票无法兑现的原因
  • 广告费发票内容是什么
  • 房地产销售未完工产品收入是含税的吗
  • php异常处理和错误处理
  • php array_reverse 以相反的顺序返回数组实例代码
  • 个体户可以不办公户吗
  • 人工智能科技向善
  • 深入理解linux内核
  • css3题目
  • 复制/root/install.log到/tmp
  • 企业自建房出售给员工个人后还需要缴纳土地使用税么
  • 取得经营所得的个人,有综合所得的是什么意思
  • 增值税普通发票和普通发票一样吗
  • Packaging a Qt application
  • mysql客户端怎么使用
  • 个体户营业额一般填多少
  • 房屋出租收入是其他业务收入吗
  • 城建税的减免规定有哪些
  • 企业收到收据后怎么处理
  • 收据盖发票专用章会被处罚吗
  • 明细分类账户的名称,核算内容及使用方法是什么规定的
  • 临时售楼部招牌效果图
  • 材料成本差异率是什么意思
  • 房屋租赁费可以加计扣除吗
  • 分销佣金税务账务怎么做
  • 纳税期限与缴库期限不符
  • 进项税销项税增值税的区别
  • 电子发票是否使用
  • 研发费用怎样进成本科目
  • windows xp开机按f12是什么操作
  • 宏基aspire s3适用固态硬盘
  • linuxshadow破解
  • linux虚拟机怎么查看目录
  • android基础入门
  • android item属性
  • 游戏引擎有几种
  • nodejs查找文件
  • Linux系统安装字体
  • bat批处理的if里面双感叹号
  • 安卓调用蓝牙接口
  • 江苏电子税务局社保缴费打印
  • 贵州省税务总局领导班子
  • 重庆税务信息采集如何操作
  • 宁波北仑有哪些服装厂
  • 税收分类编码1080499
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设