{"version":3,"file":"multi-tap.mjs","sources":["../src/multi-tap.js"],"sourcesContent":["/**\n * MultiTap 类用于在短时间间隔内连续调用时，根据调用次数执行不同的处理函数。\n *\n * @example\n * // 创建一个 MultiTap 实例，设置三个处理函数\n * const multiTap = new MultiTap([\n *   // handler1: 单次调用，必须提供\n *   (count) => console.log(`单击：${count} 次`),\n *   // handler2: 400ms 内连续调用 2 次，必须提供\n *   (count) => console.log(`双击：${count} 次`),\n *   // handler3: 400ms 内连续调用 3 次，可选（后续 handler 均为可选）\n *   (count) => console.log(`三击：${count} 次`)\n * ]);\n *\n * // 监听键盘事件：每次按空格键都会调用 trigger 方法\n * document.addEventListener(\"keydown\", (event) => {\n *   // 这里以空格键为例，也可以根据需要修改为其他键\n *   if (event.code === \"Space\") {\n *     multiTap.trigger();\n *   }\n * });\n *\n * // 提示信息：\n * console.log(\"请在 400ms 内连续按空格键进行测试！\");\n */\nclass MultiTap {\n    /**\n     * 构造函数\n     *\n     * @param {Function[]} handlers - 一个函数数组，对应连续调用次数的处理函数：\n     *                                handlers[0] 用于 1 次调用，\n     *                                handlers[1] 用于 2 次调用，\n     *                                handlers[2] 用于 3 次调用（可选），依次类推。\n     *                                至少需要提供前两个处理函数。\n     * @param {number} [interval=400] - 多次调用之间允许的间隔（毫秒），默认为 400ms。\n     *\n     * @throws {Error} 当 handlers 不是数组或数量少于 2 时抛出错误。\n     */\n    constructor(handlers, interval = 400) {\n      if (!Array.isArray(handlers) || handlers.length < 2) {\n        throw new Error(\"必须提供至少两个处理函数（handler）。\");\n      }\n      this.handlers = handlers;\n      this.interval = interval;\n      this.count = 0;\n      this.timer = null;\n    }\n  \n    /**\n     * 触发调用记录。每次外部事件（例如按键）到来时，请调用此方法，\n     * 系统会在间隔期内统计调用次数，超过间隔后执行对应的处理函数。\n     *\n     * 执行逻辑：\n     * 1. 每次调用 trigger() 时，将内部计数器加 1。\n     * 2. 如果之前已经启动了等待计时器则清除计时器，开始一个新的 400ms 倒计时。\n     * 3. 当 400ms 过去没有新的调用时，依据计数器值选择对应的处理函数执行：\n     *    - 如果 handlers 中存在与计数器相应的处理函数，则执行之；\n     *    - 否则，使用 handlers 数组中的最后一个处理函数作为默认（也适用于超过已设定的次数）。\n     * 4. 执行完成后，重置计数器和计时器。\n     */\n    trigger(data) {\n      this.count++;\n      if (this.timer) {\n        clearTimeout(this.timer);\n      }\n      this.timer = setTimeout(() => {\n        const index = this.count - 1; // 数组索引从0开始\n        // 如果没有对应的 handler，则使用最后一个 handler 做为默认行为\n        const handler = this.handlers[index] || this.handlers[this.handlers.length - 1];\n        handler(data, this.count);\n        // 重置计数器和定时器\n        this.count = 0;\n        this.timer = null;\n      }, this.interval);\n    }\n  }\n\n  // 导出 MultiTap 类\n  module.exports = { MultiTap };\n  "],"names":["MultiTap","handlers","interval","data","index"],"mappings":"AAyBA,MAAMA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaX,YAAYC,GAAUC,IAAW,KAAK;AACpC,QAAI,CAAC,MAAM,QAAQD,CAAQ,KAAKA,EAAS,SAAS;AAChD,YAAM,IAAI,MAAM,wBAAwB;AAE1C,SAAK,WAAWA,GAChB,KAAK,WAAWC,GAChB,KAAK,QAAQ,GACb,KAAK,QAAQ;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcD,QAAQC,GAAM;AACZ,SAAK,SACD,KAAK,SACP,aAAa,KAAK,KAAK,GAEzB,KAAK,QAAQ,WAAW,MAAM;AAC5B,YAAMC,IAAQ,KAAK,QAAQ;AAG3B,OADgB,KAAK,SAASA,CAAK,KAAK,KAAK,SAAS,KAAK,SAAS,SAAS,CAAC,GACtED,GAAM,KAAK,KAAK,GAExB,KAAK,QAAQ,GACb,KAAK,QAAQ;AAAA,IACrB,GAAS,KAAK,QAAQ;AAAA,EACjB;AACF;AAGD,OAAO,UAAU,EAAE,UAAAH,EAAU;"}