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

  • vivo手机长按图片识别功能怎么关闭(vivo手机长按图标快捷功能)

    vivo手机长按图片识别功能怎么关闭(vivo手机长按图标快捷功能)

  • 水星路由器怎么设置(水星路由器怎么设置上网)

    水星路由器怎么设置(水星路由器怎么设置上网)

  • 蚂蚁森林行走不给能量(蚂蚁森林不能走路线了吗)

    蚂蚁森林行走不给能量(蚂蚁森林不能走路线了吗)

  • mac怎么关闭屏幕使用时间(mac怎么关闭屏幕自动锁定)

    mac怎么关闭屏幕使用时间(mac怎么关闭屏幕自动锁定)

  • 怎么关闭微信号展示(怎么关闭微信号搜索功能)

    怎么关闭微信号展示(怎么关闭微信号搜索功能)

  • 微信有魔音怎么取消(微信魔音怎么消除)

    微信有魔音怎么取消(微信魔音怎么消除)

  • 18款和19款的macbook区别(18款和19款的奥德赛导航通用吗)

    18款和19款的macbook区别(18款和19款的奥德赛导航通用吗)

  • oppo原始密码六位(oppo手机原始密码是多少6位)

    oppo原始密码六位(oppo手机原始密码是多少6位)

  • 系统总线中地址线的功能是(计算机系统的地址总线)

    系统总线中地址线的功能是(计算机系统的地址总线)

  • qq语音图标白色是开还是关(qq语音图标白色是什么)

    qq语音图标白色是开还是关(qq语音图标白色是什么)

  • wps模式什么意思(wps mode)

    wps模式什么意思(wps mode)

  • qq视频的时候可以录屏吗(qq视频的时候可以接到电话吗)

    qq视频的时候可以录屏吗(qq视频的时候可以接到电话吗)

  • commander软件干什么的(command app)

    commander软件干什么的(command app)

  • 快手设置特别关注有什么用(快手设置特别关注后对方上线会提醒吗)

    快手设置特别关注有什么用(快手设置特别关注后对方上线会提醒吗)

  • 手机耳机有回音怎么去除(手机耳机有回音怎么解决)

    手机耳机有回音怎么去除(手机耳机有回音怎么解决)

  • 闲鱼买到假货怎么退款(闲鱼买到假货怎么办卖家不退怎么办)

    闲鱼买到假货怎么退款(闲鱼买到假货怎么办卖家不退怎么办)

  • 华为flatl10什么型号(华为fla tl10)

    华为flatl10什么型号(华为fla tl10)

  • 飞猪旅行儿童票怎么买(飞猪 儿童机票)

    飞猪旅行儿童票怎么买(飞猪 儿童机票)

  • ssl协议工作在哪一层(ssl协议的工作流程是什么)

    ssl协议工作在哪一层(ssl协议的工作流程是什么)

  • 微信聊天记录里的图片过期怎么恢复(微信聊天记录里的视频过期怎么恢复)

    微信聊天记录里的图片过期怎么恢复(微信聊天记录里的视频过期怎么恢复)

  • word怎么删除锚点(word文档里的锚)

    word怎么删除锚点(word文档里的锚)

  • iwatch5什么时候上市

    iwatch5什么时候上市

  • 相册怎么转移新手机上(相册怎么转移新照片)

    相册怎么转移新手机上(相册怎么转移新照片)

  • 华为p30pro自带膜吗(华为p30pro原厂手机膜)

    华为p30pro自带膜吗(华为p30pro原厂手机膜)

  • vue3 组件TS 类型声明(vue中的组件有几类)

    vue3 组件TS 类型声明(vue中的组件有几类)

  • 唐山发生5.1级地震 地震相关英文表达(唐山发生5.1级地震)

    唐山发生5.1级地震 地震相关英文表达(唐山发生5.1级地震)

  • ❤️国庆假期快到了,用python写个倒计时程序,助你熬到假期!❤️

    ❤️国庆假期快到了,用python写个倒计时程序,助你熬到假期!❤️

  • 多缴纳社保怎么处理
  • 收取违约金是否交税
  • 建筑发票开具与土增税扣有什么关系?
  • 商业折扣和现金折扣的入账金额
  • 弃置费用的财务费用可以税前扣除吗
  • 增值税发票的品名与报关单不一致
  • 当期计提加计抵减额如何确定
  • 可供出售金融资产和交易性金融资产
  • 税务注销后还能稽查吗
  • 存货入账价值计算公式
  • 跨区域缴纳社保
  • 货运代理公司排名前十
  • 所得税汇算清缴分录怎么做
  • 发给一个人的说说
  • 花卉租赁发票税率是多少
  • 餐饮增值税发票税率
  • 农产品发票有抵税吗
  • 公司租赁厂房开几个点发票
  • 计提附加税的会计处理
  • 个人所得税企事业单位承包经营所得
  • ca浏览器组件如何下载?
  • 租房中介费计入租赁费吗
  • 重置申报清册之前的税需要重新申报吗
  • 免税店购物需要满足什么条件
  • 股东退股未分配股利
  • 餐饮业代金券怎么用
  • 费用化支出含义
  • 应收账款的账务处理方式是什么
  • 暂估主营业务成本怎么冲销
  • linux中使用less命令分屏查看
  • 苹果六微信
  • 如何显示或隐藏编辑标记
  • 职工宿舍的折旧计入什么科目
  • 医保和养老保险一样吗
  • php 首字母大写
  • php正则替换字符串
  • 日本东京秋叶原攻略
  • php option
  • 国家公园好玩吗
  • Yii2.0小部件GridView(两表联查/搜索/分页)功能的实现代码
  • 一个实用的php验证
  • 跨年度退货
  • php获取操作系统
  • source命令怎么用
  • php array_fill
  • 预提费用的会计分录2018
  • 交易性金融资产处置时的会计核算步骤
  • vscode开发gui
  • python爬虫详细教程
  • 帝国cms会员注册天数自动升级会员组
  • 材料出入库的本质是什么
  • 专职独立研发企业是指
  • 经营过程中借股怎么处理
  • 车辆购置税多少个点?
  • 当月进项税额大但是也要交增值税吗
  • 公司员工借款后还款收据怎么填
  • 选择税的计算方法
  • 上年未计提所得税,本年怎么做分录
  • 上月留抵税额怎么看
  • 盈余公积的会计分录
  • 普通发票的开具办法是?
  • 进口材料是什么意思
  • 注销基本户必须注销专户吗
  • 营业收入影响资产负债表哪些项目
  • 产品质量认证费用属于什么成本
  • win10玩魔兽争霸卡顿
  • ubuntu怎么录音
  • SWNETSUP.EXE - SWNETSUP是什么进程 有什么用
  • win8快捷键设置在哪里设置
  • win7系统的文件夹怎么挪位置
  • windows mobile应用商店
  • win8系统怎么重新安装系统
  • linux配置静态
  • Android OpenGL ES(七)----理解纹理与纹理过滤
  • Html5+jQuery+CSS制作相册小记录
  • 统计重复出现的次数
  • android下载文件保存到本地
  • android高级开发实战------ui、ndk与安全
  • 群租房怎么举报电话
  • 广州市番禺区国丹信息管理有限公司
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设