当前位置:首页 > 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 提供了更强大的动画控制能力,适合实现更复杂的滚动效果。

vue实现数字滚动

<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 开发的数字滚动组件,使用简单且功能强大。

安装依赖:

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 定时器实现数字递增效果,适用于简单的计数场景。

<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 实现多选的方法 在 Vue 中实现多选功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-model 绑定数组 Vue 的 v-model 指令可以与复选框结合使用,绑定到一个数…

vue实现引导

vue实现引导

Vue 实现引导功能的方法 使用第三方库 推荐使用 driver.js 或 intro.js 这类专门为 Vue 设计的引导库。这些库提供了完整的 API 和样式,能够快速实现引导功能。 安装 dr…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…