当前位置:首页 > VUE

vue实现防抖节流

2026-03-27 00:58:08VUE

防抖(Debounce)的实现

防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索联想等场景。

封装防抖函数

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

在Vue组件中使用

vue实现防抖节流

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

模板绑定

<input @input="handleInput($event.target.value)" />

节流(Throttle)的实现

节流的核心思想是在固定时间间隔内只执行一次回调函数。适用于滚动事件、窗口调整等高频触发场景。

vue实现防抖节流

封装节流函数

function throttle(fn, interval) {
  let lastTime = 0;
  return function(...args) {
    const now = Date.now();
    if (now - lastTime >= interval) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}

在Vue组件中使用

export default {
  methods: {
    handleScroll: throttle(function() {
      // 滚动处理逻辑
      console.log(window.scrollY);
    }, 200)
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll);
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll);
  }
}

使用lodash库的简化方案

对于生产环境,推荐使用成熟的工具库如lodash:

import { debounce, throttle } from 'lodash';

export default {
  methods: {
    search: debounce(function(query) {
      // API调用
    }, 300),
    scrollHandler: throttle(function() {
      // 滚动处理
    }, 100)
  }
}

注意事项

  • 防抖适合连续事件结束后触发,节流适合均匀间隔触发
  • 移除事件监听时需确保使用相同的函数引用
  • 在Vue 3的setup语法中,需用ref保持函数引用:
    const search = debounce((val) => {
    console.log(val);
    }, 500);

性能优化建议

  • 合理设置延迟时间(防抖通常300-500ms,节流通常100-200ms)
  • 对于复杂计算操作优先使用防抖
  • 高频UI更新场景适合用节流保持流畅度

标签: 防抖vue
分享给朋友:

相关文章

vue 实现简单登陆

vue 实现简单登陆

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑: 创建 Vue 组件 <template> <div class="login-contai…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue实现肢体识别

vue实现肢体识别

Vue 中实现肢体识别的方法 在 Vue 项目中实现肢体识别通常需要结合第三方库或 API,例如 TensorFlow.js、MediaPipe 或 OpenCV。以下是几种常见的实现方式: 使用…