vue3封装防抖与节流,并使用

         防抖和节流主要都是为了优化项目,当我们定义一些函数方法时,有些事件会在短时间内不断的触发,而这时就会造成性能不佳,最经典的可能就是用户后台挂着游览器,而且此时某个网页还在触发同一事件导致卡顿,用户莫名其妙:“电脑坏了?”【doge】..

        以下为自行封装的输入框组件,与防抖节流定时器,可自行开启是否防抖和节流

        (如果有需要的话,后续可以把封装防抖节流输入框组件的过程写出来)

        为了不让事件在短时间内不断的触发,我们需要一个东西去限制其行为,定时器!

        让事件不被大量触发

        防抖:直到用户做完事情后才处理用户最后一次提交的事件

                相当于触发则进入等待重新定时直到事件最后一次触发然后再等时间有没有到,才把这定时器清除

        节流:用户一直在做事,但每次间隔一段时间才触发这件事,常见在滚动时加载的事件

                相当于只在特定时间内只执行一次事件,在特定时间内,再实行这个事件是无效的,直到设置的时间过了后,才执行下一次,然后再在下一次的时间段内怎么执行事件都无效

                

//封装防抖
//新建一个debounce.js文件(一般vue3+ts,也可以用ts)
//新建文件后将以下代码放入
const debounce = (fn, delay) => {
    let timer = null;
    return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(context, args);
        }, delay);
    };
};
export default debounce;

//封装防抖
//新建一个throttle.js文件(一般vue3+ts,也可以用ts)
//新建文件后将以下代码放入
const throttle = (fn, delay) => {
    let valid = true;
    return function () {
        let context = this;
        let args = arguments;
        if (!valid) {
            return false;
        }
        valid = false;
        setTimeout(() => {
            //console.log('coming');
            //fn();
            fn.apply(context, args);
            valid = true;
        }, delay);
    };
};
export default throttle;


//注意以上是两个文件,嫌麻烦可以放在同一个文件里,不过格式改为
export const debounce = (fn, delay) =>{...}
export const throttle = (fn, delay) =>{...}
//然后把export default都去掉
<script setup>
//vue2的话换个写法就行了qwq
import debounce form ...
//inputSome 为自己定义的事件
const inputSome = debounce(function(){
    //在这里写事件的逻辑代码
    console.log('comeDebounce')
},1000)

import thorttle form ...

const inputSome = thorttle(function(){
    console.log('comeThorttle')
},1000)
</script>

TypeScript(简称TS)是一种由微软开发的开源编程语言,它是JavaScript的一个超集,可以编译成纯JavaScript代码。在TS中,我们可以使用装饰器泛型等特性来封装防抖节流函数。 防抖函数节流函数都是用于控制函数执行频率的方法,常用于优化性能避免重复触发事件。 防抖函数的作用是在一定时间内,如果事件持续触发,则重新计时,直到事件停止触发后才执行函数。常见的应用场景是输入框搜索联想功能。 节流函数的作用是在一定时间内,无论事件触发多少次,只执行一次函数。常见的应用场景是滚动加载数据。 下面是一个使用TS封装防抖节流函数的示例: ```typescript // 防抖函数 function debounce(func: Function, delay: number): Function { let timer: number | null = null; return function (...args: any[]) { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { func.apply(this, args); }, delay); }; } // 节流函数 function throttle(func: Function, delay: number): Function { let timer: number | null = null; return function (...args: any[]) { if (!timer) { timer = setTimeout(() => { func.apply(this, args); timer = null; }, delay); } }; } ``` 使用示例: ```typescript function search(keyword: string) { // 模拟搜索功能 console.log(`Searching for ${keyword}`); } const debouncedSearch = debounce(search, 300); const throttledSearch = throttle(search, 300); debouncedSearch(&#39;apple&#39;); debouncedSearch(&#39;banana&#39;); debouncedSearch(&#39;cherry&#39;); throttledSearch(&#39;apple&#39;); throttledSearch(&#39;banana&#39;); throttledSearch(&#39;cherry&#39;); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coolstuz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值