first commit
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
||||
import { ObjectDirective } from "vue";
|
||||
|
||||
//#region ../../packages/directives/repeat-click/index.d.ts
|
||||
declare const REPEAT_INTERVAL = 100;
|
||||
declare const REPEAT_DELAY = 600;
|
||||
declare const SCOPE = "_RepeatClick";
|
||||
interface RepeatClickEl extends HTMLElement {
|
||||
[SCOPE]: null | {
|
||||
start?: (evt: MouseEvent) => void;
|
||||
clear?: () => void;
|
||||
};
|
||||
}
|
||||
interface RepeatClickOptions {
|
||||
interval?: number;
|
||||
delay?: number;
|
||||
handler: (...args: unknown[]) => unknown;
|
||||
}
|
||||
declare const vRepeatClick: ObjectDirective<RepeatClickEl, RepeatClickOptions | RepeatClickOptions['handler']>;
|
||||
//#endregion
|
||||
export { REPEAT_DELAY, REPEAT_INTERVAL, RepeatClickOptions, vRepeatClick };
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
||||
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
|
||||
let _vue_shared = require("@vue/shared");
|
||||
|
||||
//#region ../../packages/directives/repeat-click/index.ts
|
||||
const REPEAT_INTERVAL = 100;
|
||||
const REPEAT_DELAY = 600;
|
||||
const SCOPE = "_RepeatClick";
|
||||
const vRepeatClick = {
|
||||
beforeMount(el, binding) {
|
||||
const value = binding.value;
|
||||
const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = (0, _vue_shared.isFunction)(value) ? {} : value;
|
||||
let intervalId;
|
||||
let delayId;
|
||||
const handler = () => (0, _vue_shared.isFunction)(value) ? value() : value.handler();
|
||||
const clear = () => {
|
||||
if (delayId) {
|
||||
clearTimeout(delayId);
|
||||
delayId = void 0;
|
||||
}
|
||||
if (intervalId) {
|
||||
clearInterval(intervalId);
|
||||
intervalId = void 0;
|
||||
}
|
||||
};
|
||||
const start = (evt) => {
|
||||
if (evt.button !== 0) return;
|
||||
clear();
|
||||
handler();
|
||||
document.addEventListener("mouseup", clear, { once: true });
|
||||
delayId = setTimeout(() => {
|
||||
intervalId = setInterval(() => {
|
||||
handler();
|
||||
}, interval);
|
||||
}, delay);
|
||||
};
|
||||
el[SCOPE] = {
|
||||
start,
|
||||
clear
|
||||
};
|
||||
el.addEventListener("mousedown", start);
|
||||
},
|
||||
unmounted(el) {
|
||||
if (!el[SCOPE]) return;
|
||||
const { start, clear } = el[SCOPE];
|
||||
if (start) el.removeEventListener("mousedown", start);
|
||||
if (clear) {
|
||||
clear();
|
||||
document.removeEventListener("mouseup", clear);
|
||||
}
|
||||
el[SCOPE] = null;
|
||||
}
|
||||
};
|
||||
|
||||
//#endregion
|
||||
exports.REPEAT_DELAY = REPEAT_DELAY;
|
||||
exports.REPEAT_INTERVAL = REPEAT_INTERVAL;
|
||||
exports.vRepeatClick = vRepeatClick;
|
||||
//# sourceMappingURL=index.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","names":[],"sources":["../../../../../packages/directives/repeat-click/index.ts"],"sourcesContent":["import { isFunction } from '@element-plus/utils'\n\nimport type { ObjectDirective } from 'vue'\n\nexport const REPEAT_INTERVAL = 100\nexport const REPEAT_DELAY = 600\nconst SCOPE = '_RepeatClick'\n\ninterface RepeatClickEl extends HTMLElement {\n [SCOPE]: null | {\n start?: (evt: MouseEvent) => void\n clear?: () => void\n }\n}\n\nexport interface RepeatClickOptions {\n interval?: number\n delay?: number\n handler: (...args: unknown[]) => unknown\n}\n\nexport const vRepeatClick: ObjectDirective<\n RepeatClickEl,\n RepeatClickOptions | RepeatClickOptions['handler']\n> = {\n beforeMount(el, binding) {\n const value = binding.value\n const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction(\n value\n )\n ? {}\n : value\n\n let intervalId: ReturnType<typeof setInterval> | undefined\n let delayId: ReturnType<typeof setTimeout> | undefined\n\n const handler = () => (isFunction(value) ? value() : value.handler())\n\n const clear = () => {\n if (delayId) {\n clearTimeout(delayId)\n delayId = undefined\n }\n if (intervalId) {\n clearInterval(intervalId)\n intervalId = undefined\n }\n }\n\n const start = (evt: MouseEvent) => {\n if (evt.button !== 0) return\n clear()\n handler()\n\n document.addEventListener('mouseup', clear, { once: true })\n\n delayId = setTimeout(() => {\n intervalId = setInterval(() => {\n handler()\n }, interval)\n }, delay)\n }\n\n el[SCOPE] = { start, clear }\n el.addEventListener('mousedown', start)\n },\n unmounted(el) {\n if (!el[SCOPE]) return\n const { start, clear } = el[SCOPE]\n\n if (start) {\n el.removeEventListener('mousedown', start)\n }\n if (clear) {\n clear()\n document.removeEventListener('mouseup', clear)\n }\n el[SCOPE] = null\n },\n}\n"],"mappings":";;;;;AAIA,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAC5B,MAAM,QAAQ;AAed,MAAa,eAGT;CACF,YAAY,IAAI,SAAS;EACvB,MAAM,QAAQ,QAAQ;EACtB,MAAM,EAAE,WAAW,iBAAiB,QAAQ,6CAC1C,MACD,GACG,EAAE,GACF;EAEJ,IAAI;EACJ,IAAI;EAEJ,MAAM,4CAA4B,MAAM,GAAG,OAAO,GAAG,MAAM,SAAS;EAEpE,MAAM,cAAc;AAClB,OAAI,SAAS;AACX,iBAAa,QAAQ;AACrB,cAAU;;AAEZ,OAAI,YAAY;AACd,kBAAc,WAAW;AACzB,iBAAa;;;EAIjB,MAAM,SAAS,QAAoB;AACjC,OAAI,IAAI,WAAW,EAAG;AACtB,UAAO;AACP,YAAS;AAET,YAAS,iBAAiB,WAAW,OAAO,EAAE,MAAM,MAAM,CAAC;AAE3D,aAAU,iBAAiB;AACzB,iBAAa,kBAAkB;AAC7B,cAAS;OACR,SAAS;MACX,MAAM;;AAGX,KAAG,SAAS;GAAE;GAAO;GAAO;AAC5B,KAAG,iBAAiB,aAAa,MAAM;;CAEzC,UAAU,IAAI;AACZ,MAAI,CAAC,GAAG,OAAQ;EAChB,MAAM,EAAE,OAAO,UAAU,GAAG;AAE5B,MAAI,MACF,IAAG,oBAAoB,aAAa,MAAM;AAE5C,MAAI,OAAO;AACT,UAAO;AACP,YAAS,oBAAoB,WAAW,MAAM;;AAEhD,KAAG,SAAS;;CAEf"}
|
||||
Reference in New Issue
Block a user