<template>
<span>{{ displayNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ")}}</span>
</template>
<script setup>
const props = defineProps({
number: {
type: Number,
required: true
},
})
let displayNumber = $ref(0)
let interval = $ref(null)
onMounted(() => {
displayNumber = props.number
})
watch(() => props.number, (newVal, oldVal) => {
if (newVal === oldVal) return
if (displayNumber === newVal) return
if (interval) {
clearInterval(interval)
interval = null
}
interval = setInterval(() => {
if (displayNumber !== newVal) {
let change = (newVal - displayNumber) / 10
change = change > 0 ? Math.ceil(change) : Math.floor(change)
displayNumber += change
} else {
clearInterval(interval)
interval = null
}
}, 20)
})
</script>
<style scoped>
</style>