当前位置:首页 > VUE

vue实现数字滚动

2026-02-20 05:36:42VUE

Vue 实现数字滚动效果

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

使用 CSS 动画实现基础滚动

通过 CSS 的 transformtransition 属性实现数字的垂直滚动效果。

<template>
  <div class="number-scroll">
    <div class="digit" v-for="(digit, index) in digits" :key="index">
      <div class="digit-inner" :style="{ transform: `translateY(-${digit * 10}%)` }">
        <span v-for="n in 10" :key="n">{{ n % 10 }}</span>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Number,
      required: true
    }
  },
  computed: {
    digits() {
      return String(this.value).split('').map(Number);
    }
  }
};
</script>

<style>
.number-scroll {
  display: flex;
  overflow: hidden;
  height: 1em;
  line-height: 1em;
}

.digit {
  position: relative;
  height: 1em;
  width: 0.6em;
  overflow: hidden;
}

.digit-inner {
  position: absolute;
  transition: transform 1s ease-in-out;
}

.digit-inner span {
  display: block;
  height: 1em;
}
</style>

使用 GSAP 实现平滑滚动

GSAP 提供了更强大的动画控制能力,适合实现更复杂的滚动效果。

<template>
  <div ref="numberContainer" class="number-scroll"></div>
</template>

<script>
import { gsap } from 'gsap';

export default {
  props: {
    value: {
      type: Number,
      required: true
    }
  },
  mounted() {
    this.animateNumber();
  },
  watch: {
    value() {
      this.animateNumber();
    }
  },
  methods: {
    animateNumber() {
      gsap.to(this.$refs.numberContainer, {
        innerText: this.value,
        duration: 1,
        snap: { innerText: 1 },
        ease: 'power1.out'
      });
    }
  }
};
</script>

使用第三方库 vue-countup

vue-countup 是专门为 Vue 开发的数字滚动组件,使用简单且功能强大。

安装依赖:

npm install vue-countup

使用示例:

<template>
  <count-up 
    :end-val="value" 
    :duration="2" 
    :options="options"
  />
</template>

<script>
import CountUp from 'vue-countup';

export default {
  components: { CountUp },
  data() {
    return {
      value: 1000,
      options: {
        useEasing: true,
        useGrouping: true,
        separator: ',',
        decimal: '.'
      }
    };
  }
};
</script>

自定义 JavaScript 实现

通过 JavaScript 定时器实现数字递增效果,适用于简单的计数场景。

vue实现数字滚动

<template>
  <div>{{ currentValue }}</div>
</template>

<script>
export default {
  props: {
    value: {
      type: Number,
      required: true
    },
    duration: {
      type: Number,
      default: 1000
    }
  },
  data() {
    return {
      currentValue: 0,
      increment: 0
    };
  },
  mounted() {
    this.startAnimation();
  },
  watch: {
    value() {
      this.startAnimation();
    }
  },
  methods: {
    startAnimation() {
      const steps = 60;
      const difference = this.value - this.currentValue;
      this.increment = difference / steps;

      let step = 0;
      const timer = setInterval(() => {
        step++;
        this.currentValue += this.increment;

        if (step >= steps) {
          this.currentValue = this.value;
          clearInterval(timer);
        }
      }, this.duration / steps);
    }
  }
};
</script>

以上方法各有优劣,可根据项目需求选择最适合的实现方式。CSS 动画适合简单场景,GSAP 提供更专业的动画控制,第三方库可以快速集成,自定义实现则更加灵活。

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

相关文章

vue前端实现下载进度

vue前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:i…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue实现ppt

vue实现ppt

Vue 实现 PPT 的功能 Vue 可以结合第三方库或自定义组件实现类似 PPT 的演示效果。以下是几种常见的方法: 使用第三方库 reveal.js reveal.js 是一个流行的演示框架,支…