当前位置: 首页 > article >正文

vue3中的全局防抖节流指令

适用场景,一般业务当中存在查询、新增、编辑等操作类型,使用防抖有效防止疯狂点击增加多条数据问题

// 定义全局自定义指令
app.directive("antiShake", {
  // 在元素的 attribute 或事件监听器被应用之前调用   
  created(el, binding,) {
    let cbFun: NodeJS.Timeout|null = null;
    el.addEventListener("click", (event:any) => {
      event && event.stopImmediatePropagation();
      if (!cbFun) {
        cbFun = setTimeout(() => {
          binding.value()
        }, 2000);
      } else {
        clearTimeout(cbFun);
        cbFun = setTimeout(() => {
          binding.value()
        }, 2000);
      }
    }, true)
  },
});


//节流函数
app.directive("throttle", {
  created(el, binding,) {
    let throtTime = binding.value;
    if (!throtTime) {
      throtTime = 2000
    }
    let cbFun: NodeJS.Timeout|null = null;
    el.addEventListener("click", (event:any) => {
      if (!cbFun) {
        cbFun = setTimeout(() => {
          cbFun = null;
        }, throtTime);
      } else {
        event && event.stopImmediatePropagation();
      }
    }, true)
  },
});

页面使用方法

<template #footer>
          <span class="dialog-footer">
            <el-button type="warning" v-antiShake="add" @click="add()">确定</el-button>
          </span>
</template>

http://www.kler.cn/a/10284.html

相关文章:

  • 微信小程序的主体文件和页面文件介绍
  • Database Advantages (数据库系统的优点)
  • C++中string的新特性
  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • 多叉树笔记
  • 如何在Python中实现一个简单的搜索引擎:从零开始的指南
  • Vue学习——【第五弹】
  • 【权限维持】域控后门SSPHOOKDSRMSID万能钥匙
  • 能聊天、会学习,远不是GPT的终局
  • Android—IMS的InputReader
  • 单片机程序是如何运行起来
  • python+vue+ 疫情冷链追溯管理系统
  • 数字中国理念引领国企人力资源数字化转型与实践
  • 2.29、共享内存(2)
  • Springboot整合Quartz实现定时任务数据库动态配置
  • Python数据分析:轻松实现数据处理、分析和可视化的入门教程
  • 代码自动发布系统
  • qt - 隐式共享与d-pointer技术
  • Android 11.0 原生SystemUI下拉通知栏UI背景设置为圆角背景的定制(二)
  • ptuning v2 的 chatglm垂直领域训练记录
  • 银行数字化转型导师坚鹏:金融科技与数字化转型成功案例
  • 腾讯云服务器TencentOS系统安装宝塔Linux面板命令
  • 软件管理 基础配置(运维笔记)
  • 所有知识付费都可以用 ChatGPT 再割一次?
  • 设计师都在用的6个免费设计素材网站~
  • 【C++】内联函数理解