【防抖函数】vue封装防抖函数

第一步:创建一个js文件,复制进去

/**
 * @desc 防抖函数
 * @param {需要防抖的函数} func
 * @param {延迟时间} wait
 * @param {是否立即执行} immediate
 */

//防抖函数用法:

//结构正常写
/* <el-button type="primary" @click="jump('参数')">查询</el-button> */

//methods方法这么写:这里注意function可以让你this指向实例
//  jump: debounce(
//     function (参数) {
//       console.log(参数);
//     },
//     500, //间隔时间
//     true //是否立即执行
//   ),

 export function debounce(func, wait, immediate) {
    let timeout //计时器
    return function (...args) {//args就是传的参数
      let context = this 
      if (timeout) clearTimeout(timeout)//如果有计时器就清除计时器
      if (immediate) { //如果立即执行设置为true
        let callNow = !timeout //定时器为空就是true
        timeout = setTimeout(function() {//开启定时器
          timeout = null
        }, wait)//wait:定时器的时间
        if (callNow) func.apply(context, args)//定时器为空的话就执行把传进来的函数指向改变为这个防抖函数,然后把参数传给这个防抖函数。通过return把参数返回。
      } else {
        //立即执行为false就开个定时器在执行这个函数
        timeout = setTimeout(function() {
          func.apply(context, args)
        }, wait)
      }
    }
  }
  

第二步:引入这个js

路径自己看着要不要改一下,我放在utils内的

import { debounce } from "@/utils/debounce.js";

第三步:使用

结构:

<el-button type="primary" @click="ceshi('测试防抖')">查询</el-button>

methods:这里注意function加了是因为可以让你this指向为当前实例,如果用箭头函数就指向不生效了。无法组件其他外部变量

  methods: {
    //防抖函数测试
    ceshi: debounce(
      function (vm) {
        console.log(vm, this.a, "ceshi111");
      },
      500,
      true
    ),
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

接口写好了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值