vue3防抖函数封装与使用,以指令的形式使用
2024-01-07 18:06:16
utils/debounce.js
/**
* 防抖函数
* @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 定义全局化指令
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>
文章来源:https://blog.csdn.net/admin_web/article/details/135405274
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!