当前位置:首页 > VUE

vue实现数字过渡动画

2026-01-22 22:49:37VUE

Vue 数字过渡动画实现方法

使用 transition 和动态数据绑定

通过 Vue 的 transition 组件结合数据绑定实现数字变化时的过渡效果。定义数字变量,使用计算属性或方法动态更新数值。

<template>
  <div>
    <transition name="fade" mode="out-in">
      <span :key="currentNumber">{{ currentNumber }}</span>
    </transition>
    <button @click="increment">增加</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0
    };
  },
  methods: {
    increment() {
      this.currentNumber += 1;
    }
  }
};
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

使用第三方库如 Tween.js

引入 Tween.js 实现平滑的数字过渡动画。通过补间动画让数字变化更加流畅。

<template>
  <div>
    <span>{{ animatedNumber }}</span>
    <button @click="startAnimation">开始动画</button>
  </div>
</template>

<script>
import TWEEN from '@tweenjs/tween.js';

export default {
  data() {
    return {
      number: 0,
      animatedNumber: 0
    };
  },
  methods: {
    startAnimation() {
      new TWEEN.Tween({ value: this.number })
        .to({ value: 100 }, 1000)
        .onUpdate(obj => {
          this.animatedNumber = obj.value.toFixed(0);
        })
        .start();

      function animate() {
        requestAnimationFrame(animate);
        TWEEN.update();
      }
      animate();
    }
  }
};
</script>

使用 vue-count-to 插件

安装 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>

自定义指令实现数字动画

通过自定义指令监听数字变化,触发动画效果。适用于需要高度定制的场景。

<template>
  <div>
    <span v-number-animation="currentNumber"></span>
    <button @click="currentNumber += 10">增加</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0
    };
  },
  directives: {
    numberAnimation: {
      bind(el, binding) {
        let animationDuration = 1000;
        let frameDuration = 1000 / 60;
        let totalFrames = Math.round(animationDuration / frameDuration);
        let easeOutQuad = t => t * (2 - t);

        let current = 0;
        let target = binding.value;
        let increment = (target - current) / totalFrames;

        let animate = () => {
          current += increment;
          el.textContent = Math.floor(current);

          if (current < target) {
            requestAnimationFrame(animate);
          } else {
            el.textContent = target;
          }
        };

        animate();
      },
      update(el, binding) {
        let animationDuration = 1000;
        let frameDuration = 1000 / 60;
        let totalFrames = Math.round(animationDuration / frameDuration);
        let easeOutQuad = t => t * (2 - t);

        let current = parseFloat(el.textContent) || 0;
        let target = binding.value;
        let increment = (target - current) / totalFrames;

        let animate = () => {
          current += increment;
          el.textContent = Math.floor(current);

          if (current < target) {
            requestAnimationFrame(animate);
          } else {
            el.textContent = target;
          }
        };

        animate();
      }
    }
  }
};
</script>

使用 CSS 动画结合 Vue

通过 CSS 关键帧动画与 Vue 数据绑定结合,实现数字过渡效果。

<template>
  <div>
    <span class="number" :class="{ animate: isAnimating }">{{ currentNumber }}</span>
    <button @click="changeNumber">变化数字</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentNumber: 0,
      isAnimating: false
    };
  },
  methods: {
    changeNumber() {
      this.isAnimating = true;
      setTimeout(() => {
        this.currentNumber += Math.floor(Math.random() * 100);
        this.isAnimating = false;
      }, 500);
    }
  }
};
</script>

<style>
.number {
  display: inline-block;
}
.animate {
  animation: pulse 0.5s;
}
@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.2); }
  100% { transform: scale(1); }
}
</style>

以上方法涵盖了从简单到复杂的数字过渡动画实现,可根据项目需求选择合适的方式。

vue实现数字过渡动画

标签: 数字动画
分享给朋友:

相关文章

vue实现共享动画

vue实现共享动画

Vue 共享动画实现方法 使用 Vue Transition 组件 Vue 内置的 Transition 组件可以实现元素进入/离开的过渡效果。通过命名过渡和 mode 属性可以控制多个元素的过渡顺序…

css3动画在线制作

css3动画在线制作

CSS3 动画在线制作工具 以下是一些常用的在线工具和平台,可以帮助快速生成 CSS3 动画代码,无需手动编写: Animista 网址:https://animista.net/ 特点:提供预设的…

利用css3制作动画

利用css3制作动画

CSS3 动画基础 CSS3 通过 @keyframes 规则和 animation 属性实现动画效果。@keyframes 定义动画的关键帧,animation 控制动画的播放方式(如持续时间、延迟…

jquery动画

jquery动画

jQuery动画基础 jQuery提供了多种动画方法,用于创建平滑的过渡效果。常用的动画方法包括animate()、fadeIn()、fadeOut()、slideUp()和slideDown()。…

vue实现数字奇偶

vue实现数字奇偶

判断数字奇偶的方法 在Vue中实现数字奇偶判断,可以通过计算属性或方法来实现。以下是几种常见的方法: 使用计算属性 在Vue组件中定义一个计算属性,根据输入的数字返回奇偶状态。 compu…

vue 实现数字跳动

vue 实现数字跳动

Vue 实现数字跳动效果 数字跳动效果可以通过 Vue 的过渡动画或第三方库实现。以下是几种常见方法: 使用 Vue Transition 和 CSS 动画 通过 Vue 的 <transit…