vue2+vue3前端防抖(例如输入框)
vue3
点击查看代码
<script lang="ts" setup>
import {ref, watchEffect,reactive} from 'vue'
const antiShake = (val1: any, val2: any, time: number) => {
return setTimeout(() => {
interval.min = val1;
interval.max = val2;
console.log(`min:${val1},max${val2}`);
}, time);
};
// 输入
const state = reactive<any>({
min: undefined,
max: undefined,
});
watchEffect((onInvalidate) => {
const timer = antiShake(state.min, state.max, 2000);
onInvalidate(() => clearTimeout(timer));
});
</script>
<template>
<div class="price">
<InputNumber v-model:value="state.min" prefix="¥" :min="0" />
<span class="split">-</span>
<InputNumber v-model:value="state.max" prefix="¥" :min="0" />
</div>
<template>
vue2
// 防抖 立即执行
function debounce(fn, arg) {
// delay = delay || 1000;
let delay = 1000;
let timeout;
return function() {
let context = this;
if (timeout) clearTimeout(timeout);
let callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, delay);
if (callNow) fn.apply(context, arg);
};
}
export { debounce };
import Vue from 'vue';
import { debounce } from '@/utils';
Vue.directive('debounce', {
bind(el, binding) {
const [fn, ...args] = binding.value;
el.addEventListener('click', debounce(fn, args));
},
unbind(el, binding) {
const [fn, ...args] = binding.value;
el.removeEventListener('click', debounce(fn, args));
}
});
// 要执行的函数
handleDownload() {
console.log()
},
「vue2为摘抄版本」
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通