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

  • 固定资产清理应该在年报中怎么填写
  • 未开票收入退回可以冲税吗
  • 专票红冲要不要收回发票联
  • 契税和房产税的减免政策
  • 机票发票打印有效期多久
  • 固定资产一次扣除政策执行到什么时候?
  • 个人取得哪项收入需要缴纳个人所得税
  • 企业最常用的业务分录
  • 发票领用簿怎么领发票
  • 资产剥离类型
  • 无法收回的应收款计入什么科目
  • 业务招待费扣除限额计算基数
  • 转让土地及地上建筑物
  • 学校付学生的现金奖励入什么科目
  • 公司委托其他公司代缴社保合法吗
  • 上个月申报错了怎么办
  • 租赁房使用权和所有权冲突
  • 俱乐部会员有什么用
  • 已交税的无票收入后期怎么补开发票?
  • 发票分票怎么处理违章
  • 非全日制劳动用工扣税
  • 工会残保金必须缴纳吗
  • win10自带的照片查看器
  • 计提长期待摊费用会计分录怎么写
  • 公司收到个人入股股金,然后又投资其他公司怎么做账
  • 退回多缴的所得税怎么算
  • msworks.exe - msworks是什么进程 有什么用
  • 十个php高级应用题
  • 克洛格森林大克洛格
  • php curl_init
  • 移动端适配 px
  • 滨州高新技术企业名单
  • 交互式命令操作
  • 应收利息罚息什么意思
  • 普通发票作废算额度吗
  • 已交土地使用金的划拨商品房与商品房的的区别
  • 成本利润率算出的不含税吗
  • mysql深入理解
  • 客户多付的货款计哪里
  • 金税开票系统
  • 个体户超过定额,税率按核定税率吗
  • 固定资产盘盈为什么计入管理费用
  • 一般纳税人企业所得税税率2023
  • 无形资产出售当月是否摊销
  • 小规模纳税人缴纳的增值税计入成本吗
  • 进项税已认证转出账务处理
  • 施工仪器的主要类别
  • 应交增值税进项税额转出账务处理
  • 已经发出的商品替换零部件进成本还是费用
  • 办公用品采购如何记账
  • 跨年度发票作废已交税怎么办
  • 应收账款贷方有余额说明什么
  • 电子口岸登录显示证书错误
  • 残疾人就业保障金怎么计算
  • 工程款结清确认书
  • 注册公司没交社保
  • 重要性水平如何判断
  • 喝了阿胶补血口服液嗜睡
  • centos更新yum update
  • 电脑审核策略更改是什么意思
  • win7win8win10哪个流畅
  • win1020h2正式版下载
  • linux中tail命令详解
  • Win10怎么添加游戏
  • pim架构
  • win10出现恢复界面0xc000000f
  • jQuery插件封装时如要实现链式编程,需要
  • nodejs可以直接操作数据库
  • 认识 认知
  • shell脚本编写的基本知识
  • nodejs gyp
  • windows、linux
  • 详细分析使用AngularJS编程中提交表单的方式
  • python语言基本语法
  • js正则 \w
  • 棚改房办房产证用不用交费
  • 办公室主任和党支部书记哪个职位高
  • 四川农村信用社电话
  • 税务ukey登录界面
  • 无偿赠送怎么做账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设