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>
相关推荐
阿萨德528号14 分钟前
npm 包发布实战指南:从零发布、更新迭代到版本治理
前端·npm·策略模式
IT_陈寒27 分钟前
Vue的v-for为啥把我的渲染顺序搞乱套了?
前端·人工智能·后端
sir.山1 小时前
在 Vue 3 项目中使用 Mock 数据
前端·vue.js·vue3·vite
李剑一1 小时前
华为新上Pura X View阔直板手机,特殊屏幕比例设备下,前端应该怎么去适配更完美?送你一套完整工具代码
前端
0xBADCODE1 小时前
Flask SSTI读SECRET_KEY+伪造Session:税务系统渗透全流程
前端·后端·python·安全·web安全·网络安全·flask
01_ice1 小时前
html个人简历展示
前端·html
程序员爱钓鱼1 小时前
Rust where详解:让泛型与Trait约束更加清晰
前端·后端·rust
zzzzzz3102 小时前
react-bits 为什么会吸引前端开发者:别把动效当装饰,先把它当成页面能力
前端·react.js·动效
风月说与山鬼4 小时前
二、React入口文件(main.jsx)
前端·react.js
东风破_10 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx