当前位置:首页 > VUE

vue实现数字递增滚动

2026-02-22 10:23:48VUE

Vue 实现数字递增滚动效果

使用 Vue 实现数字递增滚动效果可以通过多种方式实现,以下是几种常见的方法:

使用 transition 和计算属性

通过 Vue 的过渡效果和计算属性结合,可以实现平滑的数字递增效果。

<template>
  <div>
    <transition name="slide-up" mode="out-in">
      <span :key="currentNumber">{{ currentNumber }}</span>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      targetNumber: 100,
      currentNumber: 0
    }
  },
  mounted() {
    this.animateNumber()
  },
  methods: {
    animateNumber() {
      const duration = 2000 // 动画持续时间
      const startTime = performance.now()

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

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

      requestAnimationFrame(updateNumber)
    }
  }
}
</script>

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

使用第三方库

Vue-count-to 是一个专门用于数字动画的 Vue 组件,使用简单且功能强大。

安装:

npm install vue-count-to

使用示例:

<template>
  <div>
    <countTo :startVal="0" :endVal="1000" :duration="3000"></countTo>
  </div>
</template>

<script>
import countTo from 'vue-count-to'
export default {
  components: { countTo }
}
</script>

自定义指令实现

创建一个 Vue 指令来实现数字滚动效果。

Vue.directive('count-up', {
  bind(el, binding) {
    let start = 0
    const end = parseInt(binding.value)
    const duration = 2000
    const increment = end / (duration / 16)

    const timer = setInterval(() => {
      start += increment
      if (start >= end) {
        clearInterval(timer)
        start = end
      }
      el.innerHTML = Math.floor(start)
    }, 16)
  }
})

使用方式:

<div v-count-up="1000"></div>

使用 GSAP 动画库

GSAP 提供了强大的动画功能,可以实现更复杂的数字滚动效果。

安装:

npm install gsap

使用示例:

vue实现数字递增滚动

<template>
  <div ref="number">{{ currentNumber }}</div>
</template>

<script>
import { gsap } from 'gsap'
export default {
  data() {
    return {
      currentNumber: 0
    }
  },
  mounted() {
    gsap.to(this, {
      duration: 2,
      currentNumber: 1000,
      onUpdate: () => {
        this.currentNumber = Math.floor(this.currentNumber)
      }
    })
  }
}
</script>

以上方法都可以实现数字递增滚动效果,根据项目需求选择最适合的方案。对于简单需求,自定义指令或 transition 足够;复杂动画建议使用 GSAP 或 vue-count-to 这类专门库。

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

相关文章

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue nexttrick实现

vue nexttrick实现

Vue 中 nextTick 的实现原理 nextTick 是 Vue 提供的一个异步方法,用于在下次 DOM 更新循环结束之后执行延迟回调。它利用了 JavaScript 的事件循环机制,确保回调在…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue实现页面

vue实现页面

Vue 实现页面的基本方法 创建 Vue 项目 使用 Vue CLI 快速初始化项目,运行以下命令安装并创建项目: npm install -g @vue/cli vue create my-pro…