UNPKG

@slan-health/taro-vueuse

Version:

taro vue版本hooks

93 lines (92 loc) 2.13 kB
import { unref } from "vue"; const timeOutPromise = (time) => { return new Promise((resolve, reject) => { try { setTimeout(() => { resolve(time); }, time); } catch (error) { reject(); } }); }; function createFilterWrapper(filter, fn) { function wrapper(...args) { filter(() => fn.apply(this, args), { fn, thisArg: this, args }); } return wrapper; } function debounceFilter(ms, options = {}) { let timer; let maxTimer; const filter = (invoke) => { const duration = unref(ms); const maxDuration = unref(options.maxWait); if (timer) clearTimeout(timer); if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { if (maxTimer) { clearTimeout(maxTimer); maxTimer = null; } return invoke(); } if (maxDuration && !maxTimer) { maxTimer = setTimeout(() => { if (timer) clearTimeout(timer); maxTimer = null; invoke(); }, maxDuration); } timer = setTimeout(() => { if (maxTimer) clearTimeout(maxTimer); maxTimer = null; invoke(); }, duration); }; return filter; } function throttleFilter(ms, trailing = true, leading = true) { let lastExec = 0; let timer; let isLeading = true; const clear = () => { if (timer) { clearTimeout(timer); timer = void 0; } }; const filter = (invoke) => { const duration = unref(ms); const elapsed = Date.now() - lastExec; clear(); if (duration <= 0) { lastExec = Date.now(); return invoke(); } if (elapsed > duration && (leading || !isLeading)) { lastExec = Date.now(); invoke(); } else if (trailing) { timer = setTimeout(() => { lastExec = Date.now(); isLeading = true; clear(); invoke(); }, duration); } if (!leading && !timer) timer = setTimeout(() => isLeading = true, duration); isLeading = false; }; return filter; } export { createFilterWrapper, debounceFilter, throttleFilter, timeOutPromise }; //# sourceMappingURL=index.js.map