saturn-ui
Version:
🪐 一款轻量级、模块化的Web可视化UI组件库(含大屏、GIS、图表、视频、后台等模块) 👍
84 lines (78 loc) • 3.45 kB
JavaScript
import { defineComponent, ref, onMounted, watch, openBlock, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString } from 'vue';
const withInstall = (main, extra) => {
main.install = (app) => {
for (const comp of [main, ...Object.values(extra ?? {})]) {
app.component(comp.name, comp);
}
};
if (extra) {
for (const [key, comp] of Object.entries(extra)) {
main[key] = comp;
}
}
return main;
};
const _hoisted_1 = { class: "ice-number-flop" };
const _hoisted_2 = { class: "front face" };
const _hoisted_3 = { class: "text" };
const _hoisted_4 = { class: "back face" };
const _hoisted_5 = { class: "text" };
var script = defineComponent({
props: {
number: { type: Number, required: false, default: 0 },
separator: { type: String, required: false, default: '' }
},
setup(__props) {
const props = __props;
const formatNumber = (number, separator) => {
const fmt = `${(number || 0).toString()}`;
return fmt.replace(/(\d)(?=(?:\d{3})+$)/g, `$1${separator}`);
};
const flipArr = ref();
const newArr = ref();
const oldArr = ref();
onMounted(() => {
watch(() => props.number, (newVal, oldVal) => {
newArr.value = formatNumber(newVal, props.separator).split('');
oldArr.value = formatNumber(oldVal, props.separator).split('');
console.log('newArr>>>>>>', newArr.value);
console.log('oldVal>>>>>>', oldArr.value);
const beforeFlipArr = [];
const afterFlipArr = [];
for (let i = 0; i < newArr.value.length; i++) {
if (newArr.value[i] !== oldArr.value[i]) {
beforeFlipArr.push(true);
}
else {
beforeFlipArr.push(false);
}
afterFlipArr.push(false);
}
flipArr.value = beforeFlipArr;
setTimeout(() => {
flipArr.value = afterFlipArr;
}, 300);
}, { immediate: true });
});
return (_ctx, _cache) => {
return (openBlock(), createElementBlock("div", _hoisted_1, [
(openBlock(true), createElementBlock(Fragment, null, renderList(newArr.value, (item, index) => {
return (openBlock(), createElementBlock("div", {
class: normalizeClass(['anim-object', 'active', { 'flip-vertical-left': flipArr.value[index] }]),
key: index
}, [
createElementVNode("div", _hoisted_2, [
createElementVNode("div", _hoisted_3, toDisplayString(item), 1)
]),
createElementVNode("div", _hoisted_4, [
createElementVNode("div", _hoisted_5, toDisplayString(oldArr.value[index]), 1)
])
], 2));
}), 128))
]));
};
}
});
script.__file = "packages/IceNumberFlip/index.vue";
const IceNumberFlip = withInstall(script, { name: 'IceNumberFlip' });
export { IceNumberFlip, IceNumberFlip as default };