Vue3 + TS 防抖动

目录

一、防抖动

1、概念

2、原理

3、应用场景


1、概念

        通过将多次连续触发的函数调用合并成一次来减少函数的执行次数。防抖的核心思想是在某个时间段内,只执行一次函数,而忽略在此时间段内的其他触发。

2、原理

(1)、定时器;

(2)、重复调用时重置定时器;

(3)、等待时间结束,执行函数。

3、应用场景
  • 按钮点击:短时间内多次点击,频繁触发事件函数。
  • 输入框输入:输入实时显示,实时频繁触发搜索事件。
  • 页面滚动:scroll 事件触发频繁。
  • 窗口调整:resize 事件频繁触发。
4、原理

利用setTimeoutclearTimeout来控制函数的执行

5、全局封装使用

(a)、封装函数 (新建文件:debounce.ts)

// 防抖指令封装
export const useDebounce = (delay: number) => {
    return {
      beforeMount(el: HTMLElement, binding: any) {
        let timer: number;
        el.addEventListener(binding.arg, () => {
          clearTimeout(timer);
          timer = setTimeout(() => {
            binding.value();
          }, delay);
        });
      }
    };
  };
   
 
  

(b)、组件中使用

<template>
  <div>
    <input v-debounce:input="onInput" placeholder="输入内容" /><br />
    <button v-debounce:click="onClickDebounce">点击防抖按钮</button>
  </div>
</template>

<script lang="ts" setup>
function onInput() {
  console.log("输入框防抖事件");
}

function onClickDebounce() {
  console.log("防抖事件");
}

</script>

<script lang="ts">
import { useDebounce } from "./debounce";

export default {
  directives: {
    debounce: useDebounce(2000),
  },
};
</script>

<style scoped></style>

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大大大大大白呢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值