yuang-framework-ui-pc
Version:
yuang-framework-ui-pc Library
108 lines (107 loc) • 2.68 kB
JavaScript
;
const vue = require("vue");
const countup_js = require("countup.js");
const props = require("./props");
const isFunction = (value) => typeof value === "function";
const _sfc_main = vue.defineComponent({
name: "EleCountUp",
props: props.countUpProps,
emits: props.countUpEmits,
setup(props2, { emit }) {
let instance;
const rootRef = vue.ref(null);
const create = () => {
const elem = vue.unref(rootRef);
if (instance || !elem) {
return;
}
const ins = new countup_js.CountUp(elem, props2.endVal ?? 0, props2.options);
if (ins.error) {
console.warn(ins);
return;
}
instance = ins;
};
const printValue = (value) => {
if (instance && isFunction(instance.printValue)) {
return instance.printValue(value);
}
};
const start = (callback) => {
if (instance && isFunction(instance.start)) {
return instance.start(callback);
}
};
const pauseResume = () => {
if (instance && isFunction(instance.pauseResume)) {
return instance.pauseResume();
}
};
const reset = () => {
if (instance && isFunction(instance.reset)) {
return instance.reset();
}
};
const update = (newEndVal) => {
if (instance && isFunction(instance.update)) {
return instance.update(newEndVal ?? 0);
}
};
const destroy = () => {
reset();
instance = null;
};
vue.watch(
() => props2.endVal,
(value) => {
update(value);
}
);
vue.watch(
() => props2.options,
() => {
destroy();
create();
emit("ready", instance);
}
);
vue.onMounted(() => {
create();
if (props2.delay < 0) {
emit("ready", instance);
return;
}
setTimeout(() => {
if (instance && isFunction(instance.start)) {
instance.start(() => {
emit("ready", instance);
});
}
}, props2.delay);
});
vue.onBeforeUnmount(() => {
destroy();
});
return {
rootRef,
printValue,
start,
pauseResume,
reset,
update
};
}
});
const _export_sfc = (sfc, props2) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props2) {
target[key] = val;
}
return target;
};
const _hoisted_1 = { ref: "rootRef" };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("span", _hoisted_1, null, 512);
}
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
module.exports = index;