当前位置:首页 > VUE

vue防抖函数实现

2026-01-20 20:21:51VUE

防抖函数原理

防抖(Debounce)是一种限制函数频繁调用的技术,在事件被触发后延迟执行,若在延迟时间内再次触发,则重新计时。适用于输入框搜索、窗口大小调整等场景。

Vue 中实现防抖的三种方式

使用 Lodash 的 debounce 方法

安装 Lodash 并导入 debounce 函数:

npm install lodash

在 Vue 组件中使用:

import { debounce } from 'lodash';

export default {
  methods: {
    handleInput: debounce(function() {
      // 实际业务逻辑
      console.log('Debounced input');
    }, 500)
  }
}

自定义防抖函数

封装一个可复用的防抖函数:

function debounce(fn, delay) {
  let timer = null;
  return function(...args) {
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

export default {
  methods: {
    search: debounce(function(query) {
      // API调用或数据处理
    }, 300)
  }
}

使用 Vue 指令实现防抖

全局注册防抖指令:

Vue.directive('debounce', {
  inserted(el, binding) {
    let timer;
    el.addEventListener('input', () => {
      if (timer) clearTimeout(timer);
      timer = setTimeout(() => {
        binding.value();
      }, binding.arg || 500);
    });
  }
});

// 使用方式
<input v-debounce:300="searchMethod">

注意事项

  • 防抖时间需根据业务场景调整,通常输入类交互建议300-500ms
  • 在组件销毁时应当清除定时器,避免内存泄漏
  • 对于需要立即执行的场景(如第一次触发立即执行),可扩展实现 leading 选项

完整组件示例

export default {
  data() {
    return {
      searchQuery: ''
    };
  },
  methods: {
    // 使用自定义防抖
    debounceSearch: debounce(function() {
      this.actualSearch();
    }, 500),

    actualSearch() {
      // 实际搜索逻辑
      console.log('Searching:', this.searchQuery);
    }
  }
}

模板中使用:

<input v-model="searchQuery" @input="debounceSearch">

vue防抖函数实现

标签: 函数防抖
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

jquery 函数

jquery 函数

jQuery 函数基础 jQuery 是一个快速、简洁的 JavaScript 库,通过封装原生 JavaScript 功能简化 DOM 操作、事件处理、动画等。核心函数 $() 或 jQuery()…

jquery函数

jquery函数

jQuery 函数概述 jQuery 是一个快速、简洁的 JavaScript 库,通过封装原生 JavaScript 功能,简化 DOM 操作、事件处理、动画和 AJAX 等任务。其核心函数 $()…

react如何使用函数

react如何使用函数

使用函数组件的基本语法 在React中,函数组件是通过JavaScript函数定义的组件。函数接收props作为参数,并返回React元素。 function Welcome(props) {…

vue实现递归函数

vue实现递归函数

Vue 中实现递归函数的方法 在 Vue 中实现递归函数通常用于处理树形结构数据、嵌套组件或递归算法。以下是几种常见实现方式: 递归组件实现 Vue 允许组件在其模板中调用自身,通过 name 选项…

vue实现防抖

vue实现防抖

Vue 实现防抖的方法 防抖(Debounce)是一种限制函数频繁调用的技术,确保函数在连续触发时只执行一次。以下是几种在 Vue 中实现防抖的方法。 使用 Lodash 的 _.debounce…