A Vue 3 component for animation counting, wrap for countUp.js(v2.6.2) and expand some features.
npm
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>
简单示例(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>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} />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 Name Description prefix 前缀 suffix 后缀 Name Description return @init CountUp 实例初始化完成触发 CountUp 实例 @finished 计数结束时触发 -
import type { ICountUp, CountUpOptions } from 'vue-countup-v3'
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
开始计数(Start animation)
切换暂停/恢复(Toggle pause/resume)
重置数值(Reset the animation)
修改结束值且继续动画(Update the end value and animate)
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4