javascript函数防抖节流,适用于搜索多次触发请求等场景。

文章介绍了在JavaScript中如何在公共方法如untils.js中实现防抖和节流功能,以减少频繁事件触发造成的资源浪费。通过实例演示了防抖在输入事件中的应用,并解释了防抖和节流的区别:防抖在指定间隔内延迟执行,而节流限制同一时间周期内只执行一次。
摘要由CSDN通过智能技术生成

在公共方法中(如 untils.js 中),加入函数防抖和节流方法

// 防抖 export function _debounce(fn, delay) { var delay = delay || 200; var timer; return function () { var th = this; var args = arguments; if (timer) { clearTimeout(timer); } timer = setTimeout(function () { timer = null; fn.apply(th, args); }, delay); }; } // 节流 export function _throttle(fn, interval) { var last; var timer; var interval = interval || 200; return function () { var th = this; var args = arguments; var now = +new Date(); if (last && now - last < interval) { clearTimeout(timer); timer = setTimeout(function () { last = now; fn.apply(th, args); }, interval); } else { last = now; fn.apply(th, args); } } }

在需要使用的组件引用

import { _debounce } from "@/utils/public";

在 methods 中使用

methods: { // 改变场数 changefield: _debounce(function(_type, index, item) { // do something ... }, 200) }

应用:

==================================================================

函数防抖(debounce)

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

<body> <input type="text" id='unDebounce'> </body> </html> <script> //模拟一段ajax请求 function ajax(content){ console.log('ajax request ' + content) }; letinputa = document.getElementById('unDebounce'); function fn(e){ ajax(e.target.value) } //防抖函数,处理多次被触发的事件,只执行最后一次 inputa.addEventListener('input', fn) </script>

看一下运行结果:

在这里插入图片描述

可以看到,我们只要输入一个字符,就会触发这次ajax请求。不仅从资源上来说是很浪费的行为,而且实际应用中,用户也是输出完整的字符后,才会请求。下面我们优化一下:

<body> <input type="text" id='unDebounce'> </body> </html> <script> //防抖函数 function _debounce(fn, delay) { var delay = delay || 200; var timer; return function () { var th = this; var args = arguments; if (timer) { clearTimeout(timer); } timer = setTimeout(function () { timer = null; fn.apply(th, args); }, delay); }; } //模拟一段ajax请求 function ajax(content){ console.log('ajax request ' + content) }; let inputa = document.getElementById('unDebounce'); function fn(e){ ajax(e.target.value) } //防抖函数,处理多次被触发的事件,只执行最后一次 inputa.addEventListener('input', _debounce(fn,1000)) </script>

在这里插入图片描述

我们加入了防抖以后,当你在频繁的输入时,并不会发送请求,只有当你在指定间隔内没有输入时,才会执行函数。如果停止输入但是在指定间隔内又输入,会重新触发计时。

个人理解 函数防抖就是法师发技能的时候要读条,技能读条没完再按技能就会重新读条。

函数节流(throttle)

规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前端校招精编面试解析大全点击这里免费获取完整版pdf查看

扫码获取!!(备注:前端)**

[外链图片转存中…(img-yA5KBIZo-1713503240102)]

最后

前端校招精编面试解析大全点击这里免费获取完整版pdf查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值