数字滚动动画效果

方法一:手写 JS 方法

/* 数字滚动动画 */
numScroll(startNum, maxNum) {
  const that = this;
  let numText = startNum;
  let animateFrame; // 清除 requestAnimationFrame 请求动画帧
  // 数字动画
  function digitalAnimation() {
    numText += 5; // 速度的计算可以为小数 。数字越大,滚动越快
    if (numText >= maxNum) {
      numText = maxNum;
      cancelAnimationFrame(animateFrame);
    } else {
      animateFrame = requestAnimationFrame(digitalAnimation); // 请求动画帧(一个浏览器的宏任务)
    }
    that.amount = numText;
  }
  digitalAnimation(); // 数字动画
}

完整代码

<template>
  <div>
    <div @click="numScroll(0, 520)">滚动</div>
    <div>{{ amount }}</div>
  </div>
</template>

<script>
  export default {
  data() {
    return {
      amount: 0,
    };
  },
  methods: {
    /* 数字滚动动画 */
    numScroll(startNum, maxNum) {
      const that = this;
      let numText = startNum;
      let animateFrame; // 清除 requestAnimationFrame 请求动画帧
      // 数字动画
      function digitalAnimation() {
        numText += 5; // 速度的计算可以为小数 。数字越大,滚动越快
        if (numText >= maxNum) {
          numText = maxNum;
          cancelAnimationFrame(animateFrame);
        } else {
          animateFrame = requestAnimationFrame(digitalAnimation); // 请求动画帧(一个浏览器的宏任务)
        }
        that.amount = numText;
      }
      digitalAnimation(); // 数字动画
    }
  }
};
</script>

<style scoped></style>

方法二:使用 vue-count-to 插件

vue-count-to 是一个没有依赖的轻量级 vue 组件,可以自行覆盖 EasingFn。可以设置 startVal 和 endVal,它会自动判断计数进行数字渲染。

npm install vue-count-to
<template>
  <div>
    <CountTo :startVal="startVal" :endVal="endVal" :duration="duration" />
  </div>
</template>

<script>
import CountTo from "vue-count-to";

export default {
  components: { CountTo },
  data() {
    return {
      startVal: 0, // 开始值
      endVal: 100, // 开始值
      duration: 3000, // 持续时间(毫秒为单位)
      timer: null // 定时器
    };
  },
  mounted() {
    this.timer = setInterval(() => {
      this.endVal = this.endVal * 2;
    }, 4000);
  },
  destroyed() {
    clearInterval(this.timer);
  }
};
</script>

<style scoped></style>

参数选项:

属性描述类型默认
startVal开始值Number0
endVal结束值Number2017
duration持续时间,以毫秒为单位Number3000
autoplay自动播放Booleantrue
decimals要显示的小数位数Number0
decimal十进制分割String.
separator分隔符String,
prefix前缀String""
suffix后缀String""
useEasing使用缓和功能Booleantrue
easingFn缓和回调Function

注意:当autoplay:true时,它将在startVal或endVal更改时自动启动

函数名称描述
mountedCallback挂载以后返回回调
start开始计数
pause暂停计数
reset重置countTo
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值