常用自定义指令-防抖与节流 【vue】【二】

前言

接上篇,Vue常用自定义指令-积累的魅力【VUE】

此篇文章介绍,自定义指令的防抖(Debounce)与节流(Throttle)

自定义指令

防抖指令

export default {
    install(app) {
        // 在Vue组件或Vue实例中注册自定义指令
        app.directive('debounce', {
            // 当被绑定的元素插入到DOM中时
            mounted: function (el, binding) {
                // 这里的binding.value是传递给指令的值,即你想要防抖的函数
                let timer; // 用于存储定时器的变量
                el.addEventListener('click', function () {
                    if (timer) clearTimeout(timer); // 如果定时器存在,则清除它
                    timer = setTimeout(() => {
                        binding.value(); // 执行传入的函数,实现防抖功能
                    }, 300); // 例如,延迟300毫秒执行
                });
            },
            // 当指令与元素解绑时
            unmounted: function (el) {
                // 移除事件监听器以避免内存泄漏
                el.removeEventListener('click', binding.value);
            }
        });
    }
}

节流指令


function throttle(func, limit) {
    let lastFunc;
    let lastRan;
    return function () {
        const context = this;
        const args = arguments;
        if (!lastRan) {
            func.apply(context, args);
            lastRan = Date.now();
        } else {
            clearTimeout(lastFunc);
            lastFunc = setTimeout(function () {
                if ((Date.now() - lastRan) >= limit) {
                    func.apply(context, args);
                    lastRan = Date.now();
                }
            }, limit - (Date.now() - lastRan));
        }
    }
}

export default {
    install(app) {
        app.directive('throttle', {
            mounted(el, binding) {
                const handler = binding.value;
                const wait = binding.arg || 500; // 默认等待时间为500毫秒,也可以通过参数指定
                const throttledHandler = throttle(handler, wait);
                el.addEventListener('click', throttledHandler);
            },
            unmounted(el, binding) {
                const handler = binding.value;
                const wait = binding.arg || 500; // 默认等待时间为500毫秒,也可以通过参数指定
                const throttledHandler = throttle(handler, wait);
                el.removeEventListener('click', throttledHandler);
            }
        });
   }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝莓味的口香糖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值