vue 实现数字跳动
实现数字跳动的效果
在Vue中实现数字跳动效果,可以通过动态更新数字并结合CSS过渡或动画来实现。以下是几种常见的实现方法:
使用Vue的过渡和动画
通过Vue的transition组件或直接使用CSS动画,可以实现数字平滑过渡的效果。
<template>
<div>
<transition name="count-up" mode="out-in">
<span :key="currentNumber" class="number">{{ currentNumber }}</span>
</transition>
<button @click="startCounting">开始计数</button>
</div>
</template>
<script>
export default {
data() {
return {
currentNumber: 0,
targetNumber: 100,
duration: 2000,
};
},
methods: {
startCounting() {
const startTime = Date.now();
const initialNumber = this.currentNumber;
const updateNumber = () => {
const elapsedTime = Date.now() - startTime;
const progress = Math.min(elapsedTime / this.duration, 1);
this.currentNumber = Math.floor(initialNumber + progress * (this.targetNumber - initialNumber));
if (progress < 1) {
requestAnimationFrame(updateNumber);
}
};
updateNumber();
},
},
};
</script>
<style>
.number {
font-size: 24px;
font-weight: bold;
}
.count-up-enter-active,
.count-up-leave-active {
transition: all 0.5s ease;
}
.count-up-enter,
.count-up-leave-to {
opacity: 0;
transform: translateY(20px);
}
</style>
使用第三方库
可以使用现成的库如vue-count-to来简化实现。
npm install vue-count-to
<template>
<div>
<countTo :startVal="0" :endVal="100" :duration="2000"></countTo>
</div>
</template>
<script>
import countTo from 'vue-count-to';
export default {
components: { countTo },
};
</script>
使用CSS动画
通过CSS的@keyframes实现数字跳动的视觉效果。
<template>
<div>
<span class="number" :style="{ '--target': targetNumber }">{{ currentNumber }}</span>
<button @click="animateNumber">开始动画</button>
</div>
</template>
<script>
export default {
data() {
return {
currentNumber: 0,
targetNumber: 100,
};
},
methods: {
animateNumber() {
const duration = 2000;
const startTime = Date.now();
const initialNumber = this.currentNumber;
const updateNumber = () => {
const elapsedTime = Date.now() - startTime;
const progress = Math.min(elapsedTime / duration, 1);
this.currentNumber = Math.floor(initialNumber + progress * (this.targetNumber - initialNumber));
if (progress < 1) {
requestAnimationFrame(updateNumber);
}
};
updateNumber();
},
},
};
</script>
<style>
.number {
font-size: 24px;
font-weight: bold;
animation: countUp 2s ease-out;
}
@keyframes countUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
</style>
使用GSAP动画库
GSAP是一个强大的动画库,可以实现更复杂的数字跳动效果。

npm install gsap
<template>
<div>
<span ref="number" class="number">0</span>
<button @click="animateWithGSAP">开始GSAP动画</button>
</div>
</template>
<script>
import { gsap } from 'gsap';
export default {
methods: {
animateWithGSAP() {
gsap.to(this.$refs.number, {
innerText: 100,
duration: 2,
snap: { innerText: 1 },
ease: "power1.out",
});
},
},
};
</script>
<style>
.number {
font-size: 24px;
font-weight: bold;
}
</style>
总结
以上方法可以根据需求选择适合的实现方式。Vue的过渡和动画适合简单的效果,第三方库可以快速实现功能,而GSAP则适合更复杂的动画需求。






