问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript防抖与节流[附demo演示,包教包会]

发布网友 发布时间:2024-10-01 03:01

我来回答

1个回答

热心网友 时间:2024-12-04 00:38

防抖

指触发事件n秒后再执行回调,若在n秒之内再次被触发,则重新计时。

手写实现防抖functiondebounce(fn,delay){lettimerreturnfunction(){letthat=thisletargs=argumentsif(timer)clearTimeout(timer)timer=setTimeout(function(){fn.apply(that,args)},delay)}}应用

由定义可知,防抖主要是为了解决事件频繁触发的问题,且仅采取频繁触发的最后一次操作。

常用场景:

输入框联想。

窗口resize事件。

以vue3为例,针对el-input的@input事件进行防抖,接口临时写的,没有返回值,主要还是让大家感受下防抖前后的现象。还有在线Demo,亲身体验,点我?。

<template><divclass="debounce-throttle"><divclass="case-one"><divclass="title">未防抖Input</div><el-inputv-model="caseStateOne"placeholder="请输入内容"@input="notDebounceSearchAsync"></el-input></div><divclass="case-two"><divclass="title">防抖Input</div><el-inputv-model="caseStateTwo"placeholder="请输入内容"@input="debounceSearchAsync"></el-input></div></div></template><scriptsetup>import{getDebounceOrThrottle}from'@/api/api.js'import{ref}from'vue'letcaseStateOne=ref('')letcaseStateTwo=ref('')/***@description:防抖函数*@param{*}fn*@param{*}delay*@return{*}*/constdebounce=function(fn,delay){lettimerreturnfunction(){letthat=thisletargs=argumentsif(timer)clearTimeout(timer)timer=setTimeout(function(){fn.apply(that,args)},delay)}}/***@description:未防抖远程搜索函数*@param{*}queryString*@param{*}cb*@return{*}*/constnotDebounceSearchAsync=asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)}/***@description:防抖远程搜索函数*@param{*}queryString*@param{*}cb*@return{*}*/constdebounceSearchAsync=debounce(asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)},1000)</script>lodash中的debounce

lodash是一个JavaScript工具库,也提供了防抖函数。既然有成熟的库,为何不用呢?

import_from'lodash'constlodashDebounceSearchAsync=_.debounce(asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)},1000)节流

规定在n秒内,只能触发一次回调。若在n秒内触发多次函数,只有第一次生效

手写节流functionthrottle(fn,delay){lettimerreturnfunction(){letthat=thisletargs=argumentsletnow=+newDate()if(timer)returntimer=setTimeout(function(){fn.apply(that,args)timer=null},delay)}}应用

由定义可知,节流也是为了解决事件频繁触发的问题,且仅采取频繁触发的第一次操作。

常用操作:

鼠标交互事件

滚动事件

以vue3为例,针对el-button的@click事件进行防抖,接口临时写的,没有返回值,主要还是让大家感受下防抖前后的现象。还有在线Demo,亲身体验,点我?。

<template><divclass="debounce-throttle"><divclass="case"><divclass="title">未节流</div><el-button@click="notThrottleSearchAsync">点我</el-button></div><divclass="case"><divclass="title">节流</div><el-button@click="throttleSearchAsync">点我</el-button></div><divclass="case"><divclass="title">lodash节流</div><el-button@click="lodashThrottleSearchAsync">点我</el-button></div></template><scriptsetup>import{getDebounceOrThrottle}from'@/api/api.js'import{ref}from'vue'/***@description:节流点击函数*@param{*}queryString*@param{*}cb*@return{*}*/constthrottleSearchAsync=throttle(asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)},1000)/***@description:lodash节流点击函数*@param{*}queryString*@param{*}cb*@return{*}*/constlodashThrottleSearchAsync=_.throttle(asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)},1000)/***@description:未节流点击函数*@param{*}queryString*@param{*}cb*@return{*}*/constnotThrottleSearchAsync=asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)}</script>lodash中的throttleimport_from'lodash'constlodashThrottleSearchAsync=_.throttle(asyncfunction(){letresult=awaitgetDebounceOrThrottle()console.log('result:',result)},1000)

作者:瑾行链接:https://juejin.cn/post/7000762453361426462著作权归作者所有。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
上午去烧香,晚上梦见僵尸要吃我 ...电梯顶层的上方看到死人半个身子 我我掉头走后 被吓醒了 郁_百度知... 我两次梦见去逛商场然后电梯(上升的,带扶手的)塌了,丧尸出来,我和一群... 梦见在丧尸要咬我然后被我一脚踢进电梯它里半个身体出来了还想咬,然后... 香港hpv九价预约官网网址 电脑所有的电线有哪些电脑有哪些连接线 电脑电源那么多线起什么作用电脑电源连接线有多少个基本的都有什么作用... 显示器要接几根线 ...连接线是9芯的,谁知道是哪几条有用,哪几条没有用,各是什么颜色... mbr平板膜可以倒着放么 电脑好象是假死机了.重复打开程序就卡死不动..任务管理器打开只显示在... 额定电压10KV,容量50KVA,S7变压器低压绕组的匝数是多少 肺癌晚期肺积水能活多久 肺腺癌伴胸腔积液一般能活多久 肺腺癌胸腔积液的生存期是多久 肺腺癌胸腔积液生存期是多少 肺癌胸腔积液能活3年吗 ...小白虎长大后变成了人形,还会跟我说话,很保护我也很喜欢 ...21:9的显示器。经常会报超出工作频率范围,求助。。。 ...HDMI转DVI线连接 开机显示【超出显示范围】 怎么解决? ...连电脑显示器,显示器显示超出工作频率范围67·5khz/60h 海螺沟门票观光车加索道多少钱 海尔电脑超出频率范围怎么解决 海螺沟观光车几天有效 探探是一款什么软件 ...了怎么恢复 一年前的微信聊天记录删除了恢复的方法 byd m6 2.0手动挡 用什么机油好 蒜蓉辣椒酱的做法(蒜蓉辣酱的做法) 广东高考补录是几月份? vivox9手机密码忘了,密保也忘了,刷机还要用手机密码吗? 函数节流和函数防抖 原来很简单 防抖和节流有什么区别,分别用于什么场景 英国留学硕士年龄要求 药水点痣后第二天痣又黑又大 周围还有褐色的 这要什么时候才能结痂啊... oppo短信通知显示内容怎么设置 文章每天更新,百度也收录,但是关键字的排名却下降了。快照今天也停止在... 为啥oppo手机在查找中不能实名认证 ...有还原卡,但密码不知道!有哪位大侠帮忙把三茗卡给卸载了!谢了... 为什么电脑开机十几分钟,就自动关机了,我再开灯亮了一会就灭了,之后就... 我的电脑刚开机时不到两分钟就自动关机,必须关闭电源才能再开电脑,再开... 电脑开机不到两分钟就自动关机,已经好几次了 电脑主机自动关机怎样解决?有时候刚开不到一分钟就关了,有时能开几分 ... 电脑总是频繁自动关机是怎么回事啊?开机不到几分钟就自动关机,重新开机... 电脑经常死机,开机不到一分钟就自动关机 而且再启动起不来要等几分钟... 剪映片尾怎么自定义? 电脑上的调音量的那个小喇叭图标不见了 但还有声音 在音标打勾也不行... 我的小本任务栏中小喇叭没了。但是有声音。可是图标放不到任务栏中... 电脑上的小喇叭图标怎么没了 北京菜有哪些特色菜 北京最有名的六大特色名菜 熬夜智商下降能恢复吗