vue3-count-to数字滚动

<template>

  <BaseCountTo

    ref="vueCountTo"

    :startVal="startVal"

    :endVal="endVal"

    :duration="duration"

    :decimals="decimals"

    :prefix="prefix"

    :suffix="suffix"

    :decimal="decimal"

    :separator="separator"

  />

</template>

<script lang="ts">

import { CountTo as BaseCountTo } from 'vue3-count-to'

import {

  defineComponent,

  toRefs,

  ref,

  onMounted,

  unref,

  onBeforeUnmount,

  watch

} from 'vue'

import type { PropType } from 'vue'

export default defineComponent({

  name: 'CountTo',

  components: { BaseCountTo },

  props: {

    duration: {

      type: Number as PropType<number>,

      default: 3000

    },

    startVal: {

      type: Number as PropType<number>,

      default: 0

    },

    endVal: {

      type: Number as PropType<number>,

      default: 0

    },

    enableLoop: {

      //是否开启循环

      type: Boolean as PropType<boolean>,

      default: true

    },

    loopTime: {

      //循环事件

      type: Number as PropType<number>,

      default: 10 * 1000

    },

    decimals: {

      //小数点位数

      type: Number as PropType<number>,

      default: 0

    },

    prefix: {

      //前缀

      type: String as PropType<string>,

      default: ''

    },

    suffix: {

      //后缀

      type: String as PropType<string>,

      default: ''

    },

    decimal: {

      //十进制分割

      type: String as PropType<string>,

      default: '.'

    },

    separator: {

      //分隔符

      type: String as PropType<string>,

      default: ','

    }

  },

  setup(props) {

    const vueCountTo = ref<null | HTMLElement>(null)

    let timer: any = null

    onMounted(() => {

      addLoop()

    })

    //添加循环

    const addLoop = () => {

      if (props.enableLoop) {

        const dom = unref(vueCountTo)

        if (dom) {

          // console.log(dom)

          timer = setInterval(() => {

            ;(dom as any).reset()

            ;(dom as any).start()

          }, props.loopTime as number)

        }

      }

    }

    watch(

      () => props.endVal,

      () => {

        clearInterval(timer)

        addLoop()

      }

    )

    onBeforeUnmount(() => {

      clearInterval(timer)

    })

    return {

      ...toRefs(props),

      vueCountTo

    }

  }

})

</script>

<style lang="scss" scoped></style>
 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值