vue3 全局定义防抖函数

本文介绍了如何在Vue组件中实现自定义防抖功能,通过创建一个名为'Debounce'的组件,利用setTimeout进行事件处理函数的延迟执行。同时,也展示了如何使用lodash-es库的debounce函数来实现相同效果,用于优化频繁触发的事件处理,提高应用性能。示例中展示了将防抖应用于按钮点击事件的场景。
摘要由CSDN通过智能技术生成

一、自定义防抖组件

  1. utils 文件夹下 的 index.js 中 写入防抖的执行函数
export const debounce = (func, time, ctx, immediate) => {
  let timer;
  const rtn = (...params) => {
    clearTimeout(timer);
    if (immediate) {
      let callNow = !timer;
      timer = setTimeout(() => {
        timer = null;
      }, time);
      if (callNow) func.apply(ctx, params);
    } else {
      timer = setTimeout(() => {
        func.apply(ctx, params);
      }, time);
    }
  };
  return rtn;
};
  1. mian.js 中加入以下代码
import { debounce } from '@/utils'

app.component('Debounce', {
    abstract: true,
    props: ['time', 'events', 'immediate'],
    created() {
      this.eventKeys = this.events && this.events.split(',');
    },
    render() {
      const vnode = this.$slots.default()[0];
      this.eventKeys.forEach((key) => {
        vnode.props[`on${key}`] = debounce(
          vnode.props[`on${key}`],
          this.time,
          vnode,
          this.immediate,
        );
      });
      return vnode;
    },
  });

使用如下

<Debounce :time="500" :immediate="true" events="Click">
  <button @click="handle">一个按钮或者任意一个元素</button>
</Debounce>

二、使用 lodash-es 中的 debounce 实现防抖

import { debounce } from 'lodash-es';
const executeFn = () => {
	// 执行函数的逻辑
}
/**
* @ 使用debounce 生成一个防抖函数 testDebounce 
* @ executeFn 需要被执行的函数
* @ 500 时间
*/
const testDebounce = debounce(executeFn, 500)

使用

<button @clcik="testDebounce">点击按钮</button>

参考

vue2+ts 使用lodash防抖处理数据
https://blog.csdn.net/wanghuohuo1998/article/details/119511254?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-13.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-13.pc_relevant_paycolumn_v3&utm_relevant_index=16

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值