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

vue3: directive自定义指令防止重复点击

第一章 前言

相信很多小伙伴会在各个渠道上搜如何防止重复点击,之后会推荐什么防抖、节流来避免这一操作,该方法小编就不继续往下说了。接下来说说小编的场景,项目已经完成的差不多了,但是由于之前大家都是直接点击事件调用方法的,导致用户频繁点击就会一直调用接口,从而导致不可避免的操作,如果使用防抖节流,小编发现必须在每一个用到按钮的页面导入、再使用等等感觉有点麻烦,于是小编想了想能不能在全局上就处理,经过小编的思考,于是最终选择利用vue的自定义指令实现!官方文档如下:

自定义指令 | Vue.js

源码如下:

第二章 源码

  • 创建directive文件夹:

index文件是根目录,其他文件是你最终写的每一个自定义指令。

  • reClick.js文件  防止重复点击方法,自定义指令 
// 通过控制元素的是否禁用,防止用户在一段时间内不可点击,从而防止重复点击
export default {
  mounted(el, binding) {
    el.addEventListener('click', () => {
      if (!el.disabled) {
        el.disabled = true
        setTimeout(() => {
          el.disabled = false
        }, binding.value || 500)
      }
    })
  }
}
  • index.js文件 引入多种自定义指令,包括防止重复点击指令 
import reClick from './reClick'
//引入其他指令
/**
 * 导出指令方法:v-xxx
 * @methods reClick 防止重复点击,用法:v-reClick
 */
export function directive(app) {
  //连续点击指令 v-reClick默认0.5秒不能连续点击,可自定义v-reClick="1000"
  app.directive('reClick', reClick)
}
  • main.js全局引入 
import App from './App.vue';
import { directive } from '@/directive/index.js' //引入自定义指令
const app = createApp(App)
directive(app) //全局引入
  • vue文件使用
<a-button type="primary" v-reClick>查询</a-button>
<a-button v-reClick="1000">重置</a-button>
<a-button v-reClick="2000">重置</a-button>
  • 最终实现效果:(禁用后即使点击也不会再触发我们的点击事件)

  • 局限:使用该方法之后只能做到用户在该段事件内不能再次点击,如果在数据请求中,后端接口请求特别慢,在该段时间内按钮又可以二次点击(解决方案:配合全局loading或者添加标记在接口返回后我们再释放el.disabled = false)


文章转载自:

http://zCPSpCUo.hxrfb.cn
http://AVZbT0Mu.hxrfb.cn
http://3LJlQnO7.hxrfb.cn
http://wwxeHQC8.hxrfb.cn
http://tE4ibjLX.hxrfb.cn
http://beJZUzNn.hxrfb.cn
http://J3Pt8HGM.hxrfb.cn
http://hPHeOBe4.hxrfb.cn
http://fSkO7NlT.hxrfb.cn
http://UJOiicnH.hxrfb.cn
http://04IxtmoU.hxrfb.cn
http://si4oKA3C.hxrfb.cn
http://hlDgbuGs.hxrfb.cn
http://2m8J6uBz.hxrfb.cn
http://Mjulg5z8.hxrfb.cn
http://iAtr4bkw.hxrfb.cn
http://2JjwkSS7.hxrfb.cn
http://aysxSS0u.hxrfb.cn
http://RrZ7j3tP.hxrfb.cn
http://em4xIHKj.hxrfb.cn
http://pFc4UvTg.hxrfb.cn
http://wLyxkhdJ.hxrfb.cn
http://PnPnXRft.hxrfb.cn
http://xnyFLuqH.hxrfb.cn
http://dXQtqXvf.hxrfb.cn
http://nR7dS3ge.hxrfb.cn
http://7uMoYcqa.hxrfb.cn
http://Lf2zl6ok.hxrfb.cn
http://ctPElddK.hxrfb.cn
http://zM3YHwJA.hxrfb.cn
http://www.dtcms.com/a/36223.html

相关文章:

  • 【java】成员变量和局部变量
  • 【python】提取word\pdf格式内容到txt文件
  • Mac中的oss上传
  • 2.3 变量
  • 【复习】Redis
  • 2.2 STM32F103C8T6最小系统板的四种有关固件的开发方式
  • Python Django系列—入门实例
  • 云原生降本之路:技术创新与应用解析
  • clickhouse--表引擎的使用
  • 防漏电保护,塔能物联运维为城市照明安全“上锁”
  • 数据库索引:原理、设计与优化
  • VSCODE 终端执行PNPM 命令出错
  • 【高可用】keepalived的试用与学习笔记
  • Python 进阶特性深度解析:从语法糖到内存管理的统一视角
  • SPRING10_getBean源码详细解读、流程图
  • 数据库配置级联数删除 ON DELETE CASCADE
  • 在CentOS 7上安装和使用Spleeter音频分离工具的详细步骤
  • 【LeetCodehHot100_0x01】
  • VUE2.0+elementUI+腾讯云点播上传视频
  • Python游戏编程之赛车游戏6-2
  • vue2和vue3响应式的区别
  • zookeeper从入门到精通
  • LabVIEW Browser.vi 库说明
  • [SWPUCTF 2022 新生赛]ez_rce
  • 前端基础知识
  • 蓝桥杯单片机组第十二届省赛第二批次
  • VMware中安装的ubuntu虚拟机屏幕由居中设置为最大化
  • Dify 工作流分类器技巧
  • LeetCode 热题100 2. 两数相加
  • JS高德地图实现降雨降雪效果