当前位置:首页 > VUE

vue 实现数字跳动

2026-03-08 19:37:15VUE

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:

npm install @tweenjs/tween.js

实现代码:

vue 实现数字跳动

<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的单文件组件创建一个登录表单,包含用户名和密码输入框以及提交…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue实现翻页

vue实现翻页

Vue实现翻页功能 在Vue中实现翻页功能通常需要结合分页组件和数据请求逻辑。以下是常见的实现方法: 使用Element UI分页组件 安装Element UI后,可以直接使用其分页组件:…

vue原生实现

vue原生实现

Vue 原生实现方法 在 Vue 中实现原生功能通常指直接使用 Vue 的核心特性(如指令、响应式数据、组件等)而非依赖第三方库。以下是几种常见场景的原生实现方式: 数据绑定与响应式更新 Vue 的…

vue 实现点击选中

vue 实现点击选中

实现点击选中效果 在Vue中实现点击选中效果可以通过多种方式完成,以下是几种常见的方法: 方法一:使用v-bind和v-on 通过绑定class和监听click事件来实现选中状态切换。 <…