当前位置:首页 > VUE

vue 实现数字跳动

2026-03-08 19:37:15VUE

Vue 实现数字跳动效果

数字跳动效果可以通过动态更新数字并结合动画实现。以下是几种常见方法:

vue 实现数字跳动

使用 transition 和动态数据绑定

<template>
  <div>
    <transition name="fade">
      <span :key="currentNumber">{{ currentNumber }}</span>
    </transition>
    <button @click="changeNumber">改变数字</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0,
      targetNumber: 100
    }
  },
  methods: {
    changeNumber() {
      const increment = this.targetNumber > this.currentNumber ? 1 : -1
      const timer = setInterval(() => {
        this.currentNumber += increment
        if (this.currentNumber === this.targetNumber) {
          clearInterval(timer)
        }
      }, 20)
    }
  }
}
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: all 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
  transform: translateY(10px);
}
</style>

使用第三方库如 Tween.js

安装 Tween.js:

vue 实现数字跳动

npm install @tweenjs/tween.js

实现代码:

<template>
  <div>
    <span>{{ animatedNumber.toFixed(0) }}</span>
    <button @click="animateNumber">开始动画</button>
  </div>
</template>

<script>
import { Tween } from '@tweenjs/tween.js'

export default {
  data() {
    return {
      animatedNumber: 0
    }
  },
  methods: {
    animateNumber() {
      const target = { num: this.animatedNumber }
      const tween = new Tween(target)
        .to({ num: 100 }, 1000)
        .onUpdate(() => {
          this.animatedNumber = target.num
        })
        .start()

      function animate(time) {
        requestAnimationFrame(animate)
        Tween.update(time)
      }
      animate()
    }
  }
}
</script>

使用 CSS 动画

<template>
  <div>
    <span class="counter" :data-target="targetNumber">{{ currentNumber }}</span>
    <button @click="startCounter">开始计数</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0,
      targetNumber: 1000
    }
  },
  methods: {
    startCounter() {
      const duration = 2000 // 动画持续时间
      const startTime = Date.now()

      const updateCounter = () => {
        const elapsed = Date.now() - startTime
        const progress = Math.min(elapsed / duration, 1)
        this.currentNumber = Math.floor(progress * this.targetNumber)

        if (progress < 1) {
          requestAnimationFrame(updateCounter)
        }
      }

      requestAnimationFrame(updateCounter)
    }
  }
}
</script>

<style>
.counter {
  display: inline-block;
  transition: all 0.5s ease-out;
}
</style>

使用 Vue Transition 组件

<template>
  <div>
    <transition name="slide-fade">
      <span :key="currentNumber" class="number">{{ currentNumber }}</span>
    </transition>
    <button @click="incrementNumber">增加数字</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0
    }
  },
  methods: {
    incrementNumber() {
      const steps = 10
      const target = this.currentNumber + 100
      const increment = (target - this.currentNumber) / steps

      for (let i = 0; i < steps; i++) {
        setTimeout(() => {
          this.currentNumber += increment
        }, i * 100)
      }
    }
  }
}
</script>

<style>
.slide-fade-enter-active {
  transition: all 0.3s ease;
}
.slide-fade-leave-active {
  transition: all 0.3s cubic-bezier(1, 0.5, 0.8, 1);
}
.slide-fade-enter, .slide-fade-leave-to {
  transform: translateY(-10px);
  opacity: 0;
}
.number {
  display: inline-block;
  font-size: 24px;
}
</style>

注意事项

  1. 性能优化:对于大量数字变化,使用 requestAnimationFrame 比 setInterval 更高效
  2. 数字格式化:使用 toFixed() 方法可以控制显示的小数位数
  3. 动画平滑度:调整动画持续时间和步长可以获得不同的视觉效果
  4. 组件复用:可以将数字跳动效果封装为可复用组件

以上方法可以根据具体需求选择使用,简单的数字跳动使用第一种方法即可,复杂的动画效果建议使用 Tween.js 等专业动画库。

标签: 数字vue
分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…

vue搜索实现

vue搜索实现

Vue 搜索功能实现方法 基于计算属性的搜索 在 Vue 中可以通过计算属性实现简单的搜索功能。这种方式适合小型数据集,利用 JavaScript 的 filter 方法进行筛选。 data() {…