vue3防抖函数封装与使用,以指令的形式使用

utils/debounce.js

javascript 复制代码
/**
 * 防抖函数
 * @param {*} fn 函数
 * @param {*} delay 暂停时间
 * @returns 
 */
export function debounce(fn, delay = 500) {
  
    let timer = null
    return function (...args) {
      // console.log(arguments);
      // const args = Array.from(arguments)
      if (timer) {
        clearTimeout(timer)
      }
      timer = setTimeout(() => {
        fn.apply(this, args)
      }, delay)
    }
  }

main.js 定义全局化指令

javascript 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import { debounce } from './utils/debounce'

const app = createApp(App)

// 创建全局指令
app.directive('debounce', {
  mounted(el, binding) {
    const { value, arg } = binding
    const debouncedFn = debounce(value, arg)
    el.addEventListener('click', debouncedFn) // 将事件改为click
  },
  beforeUnmount(el, binding) {
    const { value } = binding
    el.removeEventListener('click', value)
  }
})

app.mount('#app')

指令的使用

复制代码
<template>
	<button v-debounce="handleInput" :delay="500">无参</button>
	<button v-debounce="() => handleInput2(1, 2)" :delay="500">传参</button>
</template>
<script>
	export default{
		methods: {
		    handleInput(){
		      console.log('防抖指令的使用');
		    },
		   handleInput2(v1, v2){
		      console.log('接收参数', v1,v2);
		    },
		}
	}
</script>
相关推荐
To_OC5 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
kyriewen9 小时前
我review了一份Vibe Coding写的前端代码——能跑,但5个地方迟早要命
前端·javascript·ai编程
腻害兔10 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
Hilaku12 小时前
为什么在 2026 年,MPA(多页面应用)正在悄悄复辟?
前端·javascript·程序员
悟空瞎说12 小时前
iOS 高效绘图
javascript
触底反弹13 小时前
🔥 从 MySQL 到 Milvus:用 AI 日记本项目搞懂向量数据库和 RAG
javascript·人工智能·面试
妙码生花13 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十九):前端上传组件实现
javascript·vue.js·ai编程
dota李天王13 小时前
简单的 socket 实现
前端·javascript·websocket
寒水馨14 小时前
Linux下载、安装 Bun v1.3.14(附安装包bun-linux-x64.zip)
linux·javascript·typescript·node.js·bun·运行时·包管理器
windliang15 小时前
Claude Code 源码分析(一):从 claude 命令到 Agent 主循环
javascript·面试·ai编程