Vue项目中使用防抖

技术 · 2023-09-14
Vue项目中使用防抖

触发高频事件后n秒内函数只会执行一次,如果在n秒内高频事件再次被触发,则重新计算时间。简单的说也就是一定时间段的无论点击多少次,只会执行最后一次的调用,前面的会被清除。

<template>
  <el-input v-model="text" @input="debounceInput" />
</template>

<script>
  export default {
    mounted () {
      this.debounceInput = this.debounce(this.handle, 1000,false)
    },
    data () {
      return {
        text: '',
        debounceInput: () => {},
      }
    },

    methods: {
      handle (value) {
        console.log(value)
      },

      debounce (func, delay = 1000, immediate = false) {
        let timer = null
        //不能用箭头函数
        return function () {
          //在时间内重复调用的时候需要清空之前的定时任务
          if (timer) {
            clearTimeout(timer)
          }
          //适用于首次需要立刻执行的
          if (immediate && !timer) {
            func.apply(this,arguments)
          }
          timer = setTimeout(() => {
            func.apply(this,arguments)
          }, delay)
        }
      },
    }
  }
</script>

来源:稀土掘金
作者:hinotoyk
链接:https://juejin.cn/post/7006257717820162056

vue
  1. 2023-09-17

    我的评论呢?
    之前说过给你推给我室友了,让他学vue,怎么没了??

    1. 铅笔Naruto (作者)  2023-09-18
      @棋

      我刚看到~给精选了才能显示的哈哈,已经精选了哈

  2. 2023-09-16

    给你推给我的室友了,让他学一下vue。

    1. 铅笔Naruto (作者)  2023-09-18
      @棋

      好的好的

Theme Jasmine by Kent Liao