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

  • 节奏加快,年轻人压力的增加,脱发不再是中老年人的专利

    节奏加快,年轻人压力的增加,脱发不再是中老年人的专利

  • iqoo5g开关在哪里(iqoo手机5g开关在哪里)

    iqoo5g开关在哪里(iqoo手机5g开关在哪里)

  • 怎么关闭苹果11手机的小圆圈(怎么关闭苹果11的静音模式)

    怎么关闭苹果11手机的小圆圈(怎么关闭苹果11的静音模式)

  • iphone11有双卡双待吗(iohone11双卡吗)

    iphone11有双卡双待吗(iohone11双卡吗)

  • 街电强行扒出来怎么用(街电强制取出无法充电)

    街电强行扒出来怎么用(街电强制取出无法充电)

  • 光纤怎么连接路由器(光纤怎么连接路由器图)

    光纤怎么连接路由器(光纤怎么连接路由器图)

  • 为什么咪咕音乐听歌不要钱(为什么咪咕音乐流量用不了)

    为什么咪咕音乐听歌不要钱(为什么咪咕音乐流量用不了)

  • 电脑下载游戏打不开怎么回事

    电脑下载游戏打不开怎么回事

  • 苹果杀毒软件在哪(苹果杀毒软件在哪关闭)

    苹果杀毒软件在哪(苹果杀毒软件在哪关闭)

  • 手机号核检是什么意思(手机核检是怎么回事儿)

    手机号核检是什么意思(手机核检是怎么回事儿)

  • 小米9换屏后指纹不能用了(小米9换屏后指纹不能用了是哪里出现问题了)

    小米9换屏后指纹不能用了(小米9换屏后指纹不能用了是哪里出现问题了)

  • 华为怎么看电池健康(华为怎么看电池损耗程度)

    华为怎么看电池健康(华为怎么看电池损耗程度)

  • win10怎么设置开机密码(win10怎么设置开关机快)

    win10怎么设置开机密码(win10怎么设置开关机快)

  • wifi需认证是什么意思(wifi提示需要认证)

    wifi需认证是什么意思(wifi提示需要认证)

  • 小米9pro怎么升级miui11(小米9pro怎么升级moui14)

    小米9pro怎么升级miui11(小米9pro怎么升级moui14)

  • iphone怎么拍夜景(iphone怎么拍夜景好看)

    iphone怎么拍夜景(iphone怎么拍夜景好看)

  • 新款iphone11双卡双待怎么用(双卡双待iphone11)

    新款iphone11双卡双待怎么用(双卡双待iphone11)

  • 荣耀7x可以双卡吗(荣耀7x双卡怎么插)

    荣耀7x可以双卡吗(荣耀7x双卡怎么插)

  • iphone呼吸灯设置方法(iphone呼吸灯在哪里设置)

    iphone呼吸灯设置方法(iphone呼吸灯在哪里设置)

  • 处理器r5和i5的区别(处理器r5和i5哪个好)

    处理器r5和i5的区别(处理器r5和i5哪个好)

  • pdr与访问控制的主要区别(访问控制含义)

    pdr与访问控制的主要区别(访问控制含义)

  • 全民k歌有必要用声卡吗(全民K歌有必要录整首吗)

    全民k歌有必要用声卡吗(全民K歌有必要录整首吗)

  • 手机aris怎么退出(手机如何退)

    手机aris怎么退出(手机如何退)

  • 夏普电视的蓝牙在哪里打开(夏普电视的蓝牙怎么打开)

    夏普电视的蓝牙在哪里打开(夏普电视的蓝牙怎么打开)

  • 苹果电话拉黑后打过去是怎样的(苹果电话拉黑后短信都到哪了)

    苹果电话拉黑后打过去是怎样的(苹果电话拉黑后短信都到哪了)

  • 拼多多自己的评价在哪里看(拼多多自己的评价可以删吗)

    拼多多自己的评价在哪里看(拼多多自己的评价可以删吗)

  • Win10专业版分辨率超出工作频率范围黑屏怎么办(win10专业版分辨率1920x1080不见了)

    Win10专业版分辨率超出工作频率范围黑屏怎么办(win10专业版分辨率1920x1080不见了)

  • python中XML删除元素(python numpy 删除元素)

    python中XML删除元素(python numpy 删除元素)

  • 网站升级改造HTTPS网址教程(网站升级改造方案)

    网站升级改造HTTPS网址教程(网站升级改造方案)

  • 税务局开票需要交钱吗
  • 实收资本增加如何计算
  • 财税通财务软件怎么下载
  • 我国当前税制结构的基本情况是怎样的
  • 当期亏损如何计提所得税
  • 职工福利费开了没有发票
  • 取得的增值税专用发票能否盖付讫章
  • 企业设备融资是什么意思?
  • 多交印花税申请怎么写
  • 赔偿金要交增值税吗
  • 从财务报表中可以了解企业的哪些信息?作用是什么?
  • 接受无形资产投资进项税
  • 搞金融的企业
  • 发票金额大于实际支付金额如何报账
  • 公司新增注册资本
  • 老板拿的手机
  • mac big sur 菜单栏
  • windows11永久解决蓝屏
  • php留言板的简单编写
  • 政府发放奖励金如何入账
  • 复制粘贴如何提取文字
  • 公司融资a轮说明什么
  • 留存收益怎么计算,它属于企业的什么资金?
  • php require include
  • 不动产税费
  • sk是什么软件的缩写
  • php缓存原理
  • 工业企业销售收入和产值,税金比例
  • opencv详解
  • javascript获取input的值并计算
  • 在建工程转无形资产 会计准则
  • 结转去年成本
  • 一文教会你何为重绘、回流?
  • Access-Control-Allow-Origin 翻译
  • 按钮实现开关功能
  • 分公司不能享受所得税优惠
  • PHP模拟http请求的方法详解
  • 资产负债表中应交税费为负数是什么意思
  • 金税盘税局端系统响应错误怎么解决
  • python中lambda用法
  • 劳务派遣的开票税点是多少
  • 股东分红方式如何约定
  • 其他债权投资减值为什么不影响所有者权益
  • 通行费发票增值税申报怎么填写
  • 突然收到电子退库收入
  • 怎么处理部分股票流出
  • 客户送我东西怎么办
  • 销售折扣销售方会计处理
  • 实收金额少于发票入账
  • 废料入库如何估价
  • 公司法人借款给公司用责任承担
  • 企业给职工提供的免费住房是不是合法住宅?
  • 其他应付款转实收资本走什么程序
  • 车辆折旧费法律支持吗
  • 新成立的公司都是小微企业吗
  • mysql优化步骤
  • Linux磁盘分区的作用
  • centos6.5 minimal
  • linux系统批量任务
  • centos7批量创建用户
  • windows 10的屏幕键盘快捷键在哪里
  • mozilla是啥
  • 怎么改电脑windows7
  • win10右下角的图标点不开
  • Win10预览版镜像
  • win8外接显示器没反应怎么办
  • unity输入中文
  • 批处理命令是什么语言
  • python怎么图像处理
  • node.js详解
  • shell的变量分为哪三种
  • JavaScript mapreduce工作原理简析
  • jquery的children方法
  • Android4.4 wpa_supplicant深入分析之wpa_supplicant初始化流程续
  • jquery中的attr方法
  • 税务局和国税
  • 建筑工程开票要在项目所在地
  • 货车附加费多少钱
  • 湖南省税务举报
  • 软件企业专项审计
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设