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>
相关推荐
多加点辣也没关系4 分钟前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
陈随易2 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周2 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
计算机魔术师3 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing983 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
Highcharts.js3 小时前
常见报错排雷指南2:导出失败的官方解法
javascript·react.js·ecmascript·highcharts·可视化图表·导出模块失败·导出服务
EatFan3 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app
梦想平凡4 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
IT_陈寒4 小时前
Redis的Set操作居然能把我的服务整挂了?
前端·人工智能·后端
计算机魔术师5 小时前
Suno 发布 v6 音乐模型,推出 v6、v6-wild、v6-mini 三个版本
前端