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>
相关推荐
多看书少吃饭9 小时前
从Vue到Nuxt.js
前端·javascript·vue.js
前端一小卒9 小时前
从 v5 到 v6:这次 Ant Design 升级真的香
前端·javascript
前端不太难10 小时前
《Vue 项目路由 + Layout 的最佳实践》
前端·javascript·vue.js
老华带你飞10 小时前
物流信息管理|基于springboot 物流信息管理系统(源码+数据库+文档)
数据库·vue.js·spring boot
想学后端的前端工程师11 小时前
【Vue3组合式API实战指南:告别Options API的烦恼】
前端·javascript·vue.js
一勺-_-11 小时前
mermaid图片如何保存成svg格式
开发语言·javascript·ecmascript
GISer_Jing12 小时前
深入拆解Taro框架多端适配原理
前端·javascript·taro
毕设源码-邱学长13 小时前
【开题答辩全过程】以 基于VUE的藏品管理系统的设计与实现为例,包含答辩的问题和答案
前端·javascript·vue.js
San30.13 小时前
深入理解 JavaScript:手写 `instanceof` 及其背后的原型链原理
开发语言·javascript·ecmascript
北冥有一鲲13 小时前
LangChain.js:RAG 深度解析与全栈实践
开发语言·javascript·langchain