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>
相关推荐
半个落月1 小时前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
天外天-亮1 小时前
HBuilder X 使用 uview-plus 方式
开发语言·javascript·hbuilder x·uview-plus
huashengzsj2 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
程序猿小泓2 小时前
从 Claude Code 学 Agent Harness:一个前端工程师的 AI Agent 学习笔记
前端·人工智能·学习
柒和远方2 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构
卓怡学长3 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
minglie13 小时前
npm ali-oss库依赖冲突
前端·npm
CryptoPP3 小时前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议
Random_index5 小时前
#Vue3篇: Vue 项目发版后如何提示用户刷新?基于 package.json 版本号的前端更新检测方案
前端·vue.js·json