当前位置:首页 > 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 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue实现markdown

vue实现markdown

Vue 实现 Markdown 编辑器 在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法: 使用第三方库(如 marked 或 markdown…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue tab实现

vue tab实现

Vue Tab 实现方法 使用动态组件实现 Tab 在 Vue 中可以通过动态组件 <component :is="currentTab"> 结合 v-for 和 v-bind 实现 Ta…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…