Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数

  • 高复用:支持自定义时长、点击次数,回调分离业务逻辑,一套逻辑多处使用。
  • 无 data 污染:计时计数存于函数自身属性,多按钮状态互不干扰。
  • 容错性好:参数自带默认值,回调判空避免报错,回调回传配置信息。
  • 防内存泄漏:组件销毁清除定时器,杜绝残留计时器报错。
  • 易维护分层:入口方法与底层检测逻辑分离,改规则只需传参。
  • 轻量无侵入:原生 Vue 实现,无第三方依赖,无多余响应式开销。 相比硬编码版本,参数可动态配置,代码解耦易拓展。

sg.js方法体

javascript 复制代码
    // 连续点击方法-------------------------------------
    continueClick({ delay = 1500, clickTimes = 10, cb } = {}) {
        // 状态挂载函数自身,不占用data
        if (!$g.continueClick._data) {
            $g.continueClick._data = {
                count: 0,
                start: null,
                timer: null,
            };
        }
        const d = $g.continueClick._data;
        const now = Date.now();

        // 超出时间窗口,重置计数
        if (d.start && now - d.start > delay) {
            d.count = 0;
            d.start = null;
        }

        // 首次点击记录起始时间
        if (!d.start) d.start = now;
        d.count++;

        // 刷新倒计时
        clearTimeout(d.timer);
        d.timer = setTimeout(() => {
            d.count = 0;
            d.start = null;
        }, delay);

        // 达到指定点击次数触发逻辑
        if (d.count >= clickTimes) {
            // 触发后清空状态
            d.count = 0;
            d.start = null;
            clearTimeout(d.timer);

            cb && cb({ delay, clickTimes });
        }
    },

demo

html 复制代码
<template>
  <div>
    <el-button type="primary" @click="click">连续点击10次</el-button>
  </div>
</template>

<script>
export default {
  mounted() {},
  methods: {
    click() {
      this.$g.continueClick( {
        cb: (d) => {
          this.$message(`连续点击10次`);
        },
      });
    },
  },
};
</script>
相关推荐
用户2181697049306 小时前
Flutter(四)Dart语法 空安全 运算符 流程控制
前端
许彰午6 小时前
政务督办的分合模式:主办协办的并发审批
前端·javascript·政务
用户69371750013846 小时前
AI时代,程序员该往哪走?
前端·后端
陳陈陳6 小时前
🚀 前端流式输出革命:SSE + BFF 架构从零到一实战指南
vue.js·架构·node.js
ttwuai6 小时前
GoFrame 后台日志清空失败:无 WHERE 删除为什么被拦住
前端·golang
易筋紫容6 小时前
创建型模式:对象的诞生艺术
开发语言·前端·javascript
半句唐诗6 小时前
我是如何通过 Access Token 成功发布第一个 npm 包的
前端·npm·node.js
程序员黑豆6 小时前
鸿蒙应用开发:@Provider 与 @Consumer 跨组件双向同步详解
前端·harmonyos
paopaokaka_luck6 小时前
基于springboot3+vue3的智能文库平台(AI智能搜索、AI智能汇总、实时在线状态展示、多格式文档预览与富文本编辑、Echarts图形化分析)
前端·网络·spring boot·网络协议·echarts
牧艺7 小时前
cos-design PhotoAlbum:用 CSS 3D 做一个「能翻页」的实体相册
前端·css·交互设计