perf: improve countTo (#499)

This commit is contained in:
啝裳 2021-04-19 13:22:33 +08:00 committed by GitHub
parent 502cc2701b
commit 94b2222c08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 6 deletions

View File

@ -1,5 +1,5 @@
<template> <template>
<span> <span :style="{ color: color }">
{{ displayValue }} {{ displayValue }}
</span> </span>
</template> </template>
@ -22,6 +22,7 @@
timestamp: number | null; timestamp: number | null;
rAF: any; rAF: any;
remaining: number | null; remaining: number | null;
color: any;
}>({ }>({
localStartVal: props.startVal, localStartVal: props.startVal,
displayValue: formatNumber(props.startVal), displayValue: formatNumber(props.startVal),
@ -32,6 +33,7 @@
timestamp: null, timestamp: null,
remaining: null, remaining: null,
rAF: null, rAF: null,
color: null,
}); });
onMounted(() => { onMounted(() => {
@ -52,10 +54,11 @@
}); });
function start() { function start() {
const { startVal, duration } = props; const { startVal, duration, color } = props;
state.localStartVal = startVal; state.localStartVal = startVal;
state.startTime = null; state.startTime = null;
state.localDuration = duration; state.localDuration = duration;
state.color = color;
state.paused = false; state.paused = false;
state.rAF = requestAnimationFrame(count); state.rAF = requestAnimationFrame(count);
} }

View File

@ -13,6 +13,10 @@ export const countToProps = {
return value >= 0; return value >= 0;
}, },
}, },
color: {
type: String as PropType<string>,
require: false,
},
decimal: propTypes.string.def('.'), decimal: propTypes.string.def('.'),
separator: propTypes.string.def(','), separator: propTypes.string.def(','),
prefix: propTypes.string.def(''), prefix: propTypes.string.def(''),

View File

@ -2,16 +2,35 @@
<PageWrapper title="数字动画示例"> <PageWrapper title="数字动画示例">
<Card> <Card>
<CardGrid class="count-to-demo-card"> <CardGrid class="count-to-demo-card">
<CountTo prefix="$" :startVal="1" :endVal="200000" :duration="8000" /> <CountTo prefix="$" :color="'#409EFF'" :startVal="1" :endVal="200000" :duration="8000" />
</CardGrid> </CardGrid>
<CardGrid class="count-to-demo-card"> <CardGrid class="count-to-demo-card">
<CountTo suffix="$" :startVal="1" :endVal="300000" :decimals="2" :duration="6000" /> <CountTo
suffix="$"
:color="'red'"
:startVal="1"
:endVal="300000"
:decimals="2"
:duration="6000"
/>
</CardGrid> </CardGrid>
<CardGrid class="count-to-demo-card"> <CardGrid class="count-to-demo-card">
<CountTo suffix="$" :startVal="1" :endVal="400000" :duration="7000" /> <CountTo
suffix="$"
:color="'rgb(0,238,0)'"
:startVal="1"
:endVal="400000"
:duration="7000"
/>
</CardGrid> </CardGrid>
<CardGrid class="count-to-demo-card"> <CardGrid class="count-to-demo-card">
<CountTo separator="-" :startVal="10000" :endVal="500000" :duration="8000" /> <CountTo
separator="-"
:color="'rgba(138,43,226,.6)'"
:startVal="10000"
:endVal="500000"
:duration="8000"
/>
</CardGrid> </CardGrid>
</Card> </Card>
</PageWrapper> </PageWrapper>