UNPKG

tav-ui

Version:
1 lines 1.94 kB
{"version":3,"file":"repeatClick2.mjs","sources":["../../../../../../packages/directives/src/repeatClick.ts"],"sourcesContent":["/**\n * Prevent repeated clicks\n * @Example v-repeat-click=\"()=>{}\"\n */\nimport { on, once } from '@tav-ui/utils/domUtils'\nimport type { Directive, DirectiveBinding } from 'vue'\n\ntype Nullable<T> = T | null\ntype IntervalHandle = ReturnType<typeof setInterval>\n\nconst RepeatClickDirective: Directive = {\n beforeMount(el: Element, binding: DirectiveBinding<any>) {\n let interval: Nullable<IntervalHandle> = null\n let startTime = 0\n const handler = (): void => binding?.value()\n const clear = (): void => {\n if (Date.now() - startTime < 100) {\n handler()\n }\n interval && clearInterval(interval)\n interval = null\n }\n\n // @ts-ignore\n on(el, 'mousedown', (e: MouseEvent): void => {\n if ((e as any).button !== 0) return\n startTime = Date.now()\n once(document as any, 'mouseup', clear)\n interval && clearInterval(interval)\n interval = setInterval(handler, 100)\n })\n },\n}\n\nexport default RepeatClickDirective\n"],"names":[],"mappings":";;AACK,MAAC,oBAAoB,GAAG;AAC7B,EAAE,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE;AAC3B,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC;AACxB,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;AACtB,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC;AAC3C,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,GAAG,EAAE;AACxC,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,KAAK,CAAC;AACN,IAAI,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK;AAC/B,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;AACxB,QAAQ,OAAO;AACf,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACvC,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3C,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;;;"}