Skip to content

jizai1125/vue-countup-v3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

12dd40f · Aug 1, 2024

History

98 Commits
Jul 31, 2022
Apr 18, 2022
Mar 6, 2022
May 17, 2024
May 17, 2024
May 17, 2024
Jan 12, 2024
May 17, 2024
May 17, 2024
May 15, 2022
Mar 10, 2022
Apr 18, 2022
Jan 22, 2024
May 17, 2024
May 17, 2024
Aug 1, 2024
May 17, 2024
Mar 6, 2022
Mar 31, 2022
May 17, 2024
May 17, 2024
May 17, 2024
May 17, 2024
May 17, 2024
May 17, 2024

Repository files navigation

vue-countup-v3 npm

A Vue 3 component for animation counting, wrap for countUp.js(v2.6.2) and expand some features.

gif

Installation

npm

npm i vue-countup-v3
cdn cdn 方式引入,暴露的全局变量为 VueCountUp
<!DOCTYPE html>
<html lang="en">
  <body>
    <div id="app">
       <count-up :end-val="2000"></count-up>
    </div>

    <script src="https://unpkg.com/vue@latest"></script>
    <script src="https://unpkg.com/vue-countup-v3@latest/dist/vue-countup-v3.umd.js"></script>
    <script>
        const app = Vue.createApp({})
        app.component('CountUp', VueCountUp)
        app.mount('#app')
    </script>
  </body>
</html>

Usage

简单示例(simple usage)

<script setup lang="ts">
import CountUp from 'vue-countup-v3'
</script>

<template>
  <count-up :end-val="2000"></count-up>
</template>
插槽示例(slot usage) 当 prefix / suffix 需要与数值样式区分开时,可使用插槽的方式取代 options 中的 prefix / suffix 配置。
<script setup lang="ts">
  import CountUp from 'vue-countup-v3'
</script>

<template>
  <count-up :end-val="2000">
    <template #prefix>
      <span style="color: orange">prefix</span>
    </template>
    <template #suffix>
      <span style="color: red">prefix</span>
    </template>
  </count-up>
</template>
完整示例(full usage)
<script setup lang="ts">
  import { ref } from 'vue'
  import CountUp from 'vue-countup-v3'
  import type { ICountUp, CountUpOptions } from 'vue-countup-v3'
  
  const endValueRef = ref(2022.22)
  // coutup.js options
  const options: CountUpOptions = {
    separator: '❤️'
    // ...
  }
  let countUp: ICountUp | undefined
  const onInit = (ctx: ICountUp) => {
    console.log('init', ctx)
    countUp = ctx
  }
  const onFinished = () => {
    console.log('finished')
  }
</script>

<template>
  <count-up 
    :end-val="endValueRef"
    :duration="2.5"
    :decimal-places="2"
    :options="options"
    :loop="2"
    :delay="2"
    @init="onInit"
    @finished="onFinished"></count-up>
</template>

SSR 中使用

Vite

需在 vite.config.ts 中添加配置,将 vue-countup-v3 加入 ssr.noExternal 配置中,让 vite 不视为外部依赖,将依赖包含在 SSR 的打包中,避免出现问题。

import { defineConfig } from 'vite'

export default defineConfig({
  // ...
  ssr: {
    noExternal: ['vue-countup-v3']
  }
})
Nuxt

需在 nuxt.config.ts 中添加配置

// nuxt.config.ts
import { defineNuxtConfig } from 'nuxt3';

export default defineNuxtConfig({
  build: {
    transpile: ['vue-countup-v3'],
  },
});

或者用 <ClientOnly> 组件包裹

<ClientOnly>
  <CountUp :end-val="3000" :options="{ enableScrollSpy: true }" />
</ClientOnly>
Astro

需要在组件上加个指令 client:only

<CountUp client:load client:only end-val={2000} />

属性(Properties)

Name Type Default Description Version
endVal Number | String - 结束值
startVal Number | String 0 起始值
duration Number 2.5 动画时长,单位:秒
decimalPlaces Number 0 小数点位数 1.1.0
autoplay Boolean true 是否自动计数
loop Boolean | Number false 循环次数,有限次数 / 无限循环
delay Number 0 loop 循环的间隔时间,单位:秒
options Object - countUp.js Options

插槽(slots)

Name Description
prefix 前缀
suffix 后缀

事件(Events)

Name Description return
@init CountUp 实例初始化完成触发 CountUp 实例
@finished 计数结束时触发 -

类型定义 (Type Definition)

import type {
    ICountUp,
    CountUpOptions
} from 'vue-countup-v3'

coutup.js 说明

配置项(Options

interface CountUpOptions {
  startVal?: number // number to start at (0) 开始数值,默认 0
  decimalPlaces?: number // number of decimal places (0) 小数点 位数
  duration?: number // animation duration in seconds (2) 动画时长
  useGrouping?: boolean // example: 1,000 vs 1000 (true) 是否使用千分位
  useIndianSeparators?: boolean; // example: 1,00,000 vs 100,000 (false)
  useEasing?: boolean // ease animation (true) 是否开启动画过渡,默认动画函数为 easeOutExpo 
  smartEasingThreshold?: number // smooth easing for large numbers above this if useEasing (999)
  smartEasingAmount?: number // amount to be eased for numbers above threshold (333)
  separator?: string // grouping separator (',') 千分位分隔符
  decimal?: string // decimal ('.') 小数点分隔符
  // easingFn: easing function for animation (easeOutExpo) 动画函数
  easingFn?: (t: number, b: number, c: number, d: number) => number
  formattingFn?: (n: number) => string // this function formats result 格式化结果
  prefix?: string // text prepended to result 数值前缀
  suffix?: string // text appended to result 数值后缀
  numerals?: string[] // numeral glyph substitution 数字符号替换 0 - 9,例如替换为 [a,b,c,d,e,f,g,h,i,j]
  enableScrollSpy?: boolean // start animation when target is in view 在可视范围内才开始动画
  scrollSpyDelay?: number // delay (ms) after target comes into view  目标进入可视范围内后的延迟时间(毫秒)
  scrollSpyOnce?: boolean; // run only once
  onCompleteCallback?: () => any; // gets called when animation completes
  plugin?: CountUpPlugin; // for alternate animations
}

see more countUp.js

方法(Methods)

开始计数(Start animation)

countUp.start()

切换暂停/恢复(Toggle pause/resume)

countUp.pauseResume()

重置数值(Reset the animation)

countUp.reset()

修改结束值且继续动画(Update the end value and animate)

countUp.update(1000)

License

MIT