vue3 数字滚动插件vue-number-roll-plus

vue yekong

数据可视化大屏 项目中很多地方都需要数字展示,为了不让页面看起来单调,数字经常需要添加一些滚动的动画效果。这里使用的vue3之前的组件不好用了,所以从新找了一个在vue3环境下可以用的组件。

安装依赖

npm install vue3-number-roll-plus --save

使用

<template>
   <vue-number-roll-plus
      :number="9999"
      background="transparent"
    >
  </vue-number-roll-plus>
</template>

<script>
import VueNumberRollPlus from "vue3-number-roll-plus"
import "vue3-number-roll-plus/main.css"
export default {
  components: {
    VueNumberRollPlus
  }
}
</script>

属性

属性 属性含义 类型 默认值
number 传入的数字 Number/String 0
isSemicolon 是否三位分隔 Boolean FALSE
speed 滚动速度(s) Number 1
background 背景色 String #0e68cc

事件

事件名 事件 参数
numberChange 数字变化后触发 number
done 数字滚动结束之后触发 number

保留两位小数

vue-number-roll-plus默认不支持小数,所以做了一点调整,让其支持小数的显示。

<template>
  <div class="numcard">
    <vue-number-roll-plus
        :number="number1"
        :speed="1.5"
        :isSemicolon="true"
        v-if="show"
        background="transparent"
    >
    </vue-number-roll-plus>
    <div v-if="isFixed" class="numcard">
      <div class="dot">.</div>
      <vue-number-roll-plus
          :number="number2"
          :speed="1.5"
          :isSemicolon="true"
          v-if="show"
          background="transparent"
      >
      </vue-number-roll-plus>
    </div>
  </div>

</template>

<script>
import VueNumberRollPlus from "vue3-number-roll-plus"
import "vue3-number-roll-plus/main.css"
import WOW from "wow.js";

export default {
  components: {
    VueNumberRollPlus
  },
  props: {
    number: {
      type: Number,
      default() {
        return 0;
      }
    },
    isFixed: {
      type: Boolean,
      default() {
        return false;
      }
    },
  },
  computed: {
    number1: function () {
      console.log(this.number.toFixed(2))
      console.log(123)
      var num = (this.number.toFixed(2)).toString()
      return num.split(".")[0]
    },
    number2: function () {
      console.log(this.number.toFixed(2))
      console.log(123)
      var num = (this.number.toFixed(2)).toString()
      return num.split(".")[1]
    }
  },
  data() {
    return {
      show: false,
    }
  },
  watch: {
    number() {
      this.show = false
      this.$nextTick(() => {
        this.show = true
      })
    },
  },
  mounted() {
    this.show = false
    this.$nextTick(() => {
      this.show = true
    })
  },
}
</script>
<style lang="scss">
.numcard {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: nowrap;
  flex-direction: row;
  align-content: flex-start;
}
</style>

喜欢