封装 vue 自定义指令防抖函数

536 阅读1分钟

建立一个 指令文件 debounceDirective.js 当您在使用Vue2框架时,可以按以下方式封装一个防抖指令: 1、建立文件

// debounceDirective.js

// 导出一个自定义指令对象
export const debounceDirective = {
  // 指令的定义
  inserted(el, binding) {
    let timeoutId = null;
    
    // 获取传入的防抖时间,默认为300毫秒
    const debounceTime = parseInt(binding.arg) || 300;
    
    // 触发防抖操作的事件类型,默认为input事件
    const eventType = binding.value || 'input';
    
    // 监听目标元素的指定事件,并进行防抖处理
    el.addEventListener(eventType, () => {
      clearTimeout(timeoutId);
      
      timeoutId = setTimeout(() => {
        // 执行传入的回调函数
        binding.expression && binding.value();
      }, debounceTime);
    });
  },
  
  // 可选的其他钩子函数,如unbind等
  unbind(el) {
    el.removeEventListener(eventType);
  }
};

2、使用, 在需要使用防抖功能的组件中,将该指令导入,并在Vue实例中注册该指令:

// demo.vue

<template>
  <div>
    <input v-debounce:300="handleInput" type="text" />
  </div>
</template>

<script>
import { debounceDirective } from './debounceDirective.js';

export default {
  directives: {
    debounce: debounceDirective
  },
  
  methods: {
    handleInput() {
      // 用于处理防抖事件的回调函数
      // 在指定的防抖时间内,只会执行一次
    }
  }
};
</script>

后言: 在 inserted 钩子函数中实现了防抖逻辑。在使用该指令的组件中,通过 v-debounce:300 将防抖指令绑定到目标元素上,即可实现防抖功能。

请注意,代码中的 300 表示防抖时间,可以根据需要进行调整。同时,您也可以根据实际需求对指令进行扩展和修改。