当前位置:首页 > VUE

vue实现数字跳动

2026-03-29 17:38:40VUE

实现数字跳动效果

在Vue中实现数字跳动效果,可以通过CSS动画或JavaScript动画库来完成。以下是几种常见的实现方式:

使用CSS过渡动画

通过Vue的transition组件结合CSS过渡实现数字变化时的动画效果:

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

<script>
export default {
  data() {
    return {
      currentNumber: 0
    }
  },
  methods: {
    changeNumber() {
      this.currentNumber = Math.floor(Math.random() * 100)
    }
  }
}
</script>

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

使用GSAP动画库

GSAP是一个强大的JavaScript动画库,可以实现更复杂的数字跳动效果:

<template>
  <div>
    <div ref="numberElement">{{ animatedNumber }}</div>
    <button @click="animateTo(100)">跳动到100</button>
  </div>
</template>

<script>
import { gsap } from 'gsap'

export default {
  data() {
    return {
      animatedNumber: 0
    }
  },
  methods: {
    animateTo(target) {
      gsap.to(this, {
        duration: 1,
        animatedNumber: target,
        ease: "bounce.out"
      })
    }
  }
}
</script>

自定义数字递增动画

实现一个自定义的数字递增动画,模拟计数器的效果:

vue实现数字跳动

<template>
  <div>
    <div>{{ formattedNumber }}</div>
    <button @click="startAnimation(0, 1000)">开始动画</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0,
      animationFrame: null
    }
  },
  computed: {
    formattedNumber() {
      return Math.floor(this.currentNumber)
    }
  },
  methods: {
    startAnimation(start, end) {
      const duration = 2000 // 2秒
      const startTime = performance.now()

      const animate = (timestamp) => {
        const elapsed = timestamp - startTime
        const progress = Math.min(elapsed / duration, 1)
        this.currentNumber = start + (end - start) * progress

        if (progress < 1) {
          this.animationFrame = requestAnimationFrame(animate)
        }
      }

      cancelAnimationFrame(this.animationFrame)
      this.animationFrame = requestAnimationFrame(animate)
    }
  },
  beforeDestroy() {
    cancelAnimationFrame(this.animationFrame)
  }
}
</script>

使用vue-count-to插件

对于更简单的实现,可以使用专门为Vue设计的数字动画插件vue-count-to

  1. 首先安装插件:

    vue实现数字跳动

    npm install vue-count-to
  2. 在组件中使用:

    
    <template>
    <div>
     <count-to :start-val="0" :end-val="100" :duration="3000"></count-to>
    </div>
    </template>
import CountTo from 'vue-count-to'

export default { components: { CountTo } }

```

数字格式化与千分位

在数字跳动的同时添加千分位格式化:

<template>
  <div>
    <div>{{ formattedNumber }}</div>
    <button @click="animateNumber(0, 1234567)">开始动画</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0
    }
  },
  computed: {
    formattedNumber() {
      return this.currentNumber.toLocaleString()
    }
  },
  methods: {
    animateNumber(start, end) {
      const duration = 2000
      let startTimestamp = null

      const step = (timestamp) => {
        if (!startTimestamp) startTimestamp = timestamp
        const progress = Math.min((timestamp - startTimestamp) / duration, 1)
        this.currentNumber = Math.floor(progress * (end - start) + start)

        if (progress < 1) {
          window.requestAnimationFrame(step)
        }
      }

      window.requestAnimationFrame(step)
    }
  }
}
</script>

以上方法提供了从简单到复杂的数字跳动实现方案,可以根据项目需求选择适合的方式。CSS过渡适合简单的数字变化,GSAP适合需要复杂缓动效果的场景,自定义实现则提供了最大的灵活性。

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

相关文章

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另一…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…

vue实现循环

vue实现循环

Vue 实现循环的方法 在 Vue 中,可以通过 v-for 指令实现循环渲染列表或对象。以下是几种常见的用法: 遍历数组 使用 v-for 遍历数组时,可以同时获取当前项和索引: <ul&…