Skip to content

Counter 数字滚动 ​

纯原生 requestAnimationFrame 驱动的数字缓动动画,无第三方动画库依赖,配合 Hero 区块和 Dashboard 统计展示效果极佳。

预览 ​

Preview

基础用法

0 +

组件安装次数

0.0 %

可用性

0

内置组件数

prefix 前缀(如货币符号)

$ 0 ¥ 0

separator 千分位分隔符

0 0 0

from 起始值

100 1,000

尺寸:SM / MD / LG / XL

0 SM
0 MD
0 LG
0 XL

complete 事件

0

变体(仅文字颜色)

0 default
0 primary
0
accent
0 success
0 danger

安装 ​

pnpm dlx brutx-vue@latest add counter

用法 ​

vue
<script setup>
import { Counter } from 'brutx-ui-vue'
import { ref } from 'vue'

const counterRef = ref()
</script>

<template>
    <!-- 基础用法 -->
    <Counter :to="12800" suffix="+" size="lg" />

    <!-- 小数点 -->
    <Counter :to="99.9" :decimals="1" suffix="%" />

    <!-- 手动控制 -->
    <Counter ref="counterRef" :to="500" :auto-start="false" />
    <button @click="counterRef.play()">开始</button>
</template>

自定义组件前缀/后缀 ​

vue
<script setup>
import { Counter } from 'brutx-ui-vue'
import { DollarSign, Percent } from 'lucide-vue-next'
</script>

<template>
    <!-- 使用组件作为前缀 -->
    <Counter :to="12800" :prefix-component="DollarSign" />

    <!-- 使用文本作为后缀 -->
    <Counter :to="99.9" :decimals="1" suffix="%" />

    <!-- 混合使用:组件前缀 + 文本后缀 -->
    <Counter :to="500" :prefix-component="DollarSign" suffix="万" :animate-suffix="false" />
</template>

变体 ​

variant 仅影响数字文字颜色,方便在不同背景上突出展示统计数值。accent 为亮黄色,在浅色背景上对比度偏低,建议在深色或彩色背景上使用。

变体说明
default标准前景色文字
primaryPrimary(珊瑚色)文字
accentAccent(黄色)文字
successSuccess(绿色)文字
dangerDestructive(红色)文字
vue
<script setup>
import { Counter } from 'brutx-ui-vue'
</script>

<template>
    <div class="flex flex-wrap items-end gap-6">
        <Counter :to="128" variant="default" size="lg" />
        <Counter :to="128" variant="primary" size="lg" />
        <Counter :to="128" variant="accent" size="lg" />
        <Counter :to="128" variant="success" size="lg" />
        <Counter :to="128" variant="danger" size="lg" />
    </div>
</template>

尺寸 ​

尺寸说明
sm小字号
md默认字号
lg大字号
xl超大字号

程序化控制 ​

Counter 通过 defineExpose 暴露以下方法,允许父组件通过 ref 调用:

vue
<script setup>
import { ref } from 'vue'
import { Counter } from 'brutx-ui-vue'

const counterRef = ref()
</script>

<template>
    <Counter ref="counterRef" :to="500" :auto-start="false" />
    <button @click="counterRef?.play()">开始</button>
    <button @click="counterRef?.stop()">停止</button>
</template>

API 参考 ​

Counter — 属性
名称类型默认值说明
to
必填
number
—
动画的目标数值,必填。
详情

声明类型

number

默认值详情

未声明默认值
—

来源

Counter.vue:14

packages/ui/src/components/counter/Counter.vue

from
number | undefined
0
动画起始数值;play() 也从该值重新开始。
详情

声明类型

number | undefined

默认值详情

解析值
0

来源

Counter.vue:15

packages/ui/src/components/counter/Counter.vue

duration
number | undefined
2000
动画时长,单位为毫秒;非正数使用组件默认时长。
详情

声明类型

number | undefined

默认值详情

声明
DEFAULT_COUNTER_DURATION

来源: packages/ui/src/components/counter/Counter.vue

解析值
2000

来源

Counter.vue:16

packages/ui/src/components/counter/Counter.vue

decimals
number | undefined
0
显示的小数位数,结果按该位数格式化。
详情

声明类型

number | undefined

默认值详情

解析值
0

来源

Counter.vue:17

packages/ui/src/components/counter/Counter.vue

decimalSeparator
string | undefined
"."
数字整数和小数部分之间显示的分隔符。
详情

声明类型

string | undefined

默认值详情

解析值
"."

来源

Counter.vue:18

packages/ui/src/components/counter/Counter.vue

prefix
string | undefined
""
显示在数值前面的文本,例如货币符号。
详情

声明类型

string | undefined

默认值详情

解析值
""

来源

Counter.vue:19

packages/ui/src/components/counter/Counter.vue

suffix
string | undefined
""
显示在数值后面的文本,例如百分号或加号。
详情

声明类型

string | undefined

默认值详情

解析值
""

来源

Counter.vue:20

packages/ui/src/components/counter/Counter.vue

prefixComponent
Component | undefined
undefined
替代文本前缀的展示型组件;测量布局时会额外挂载一份,因此应避免内部状态和副作用。
详情

声明类型

Component | undefined

默认值详情

解析值
undefined

来源

Counter.vue:25

packages/ui/src/components/counter/Counter.vue

suffixComponent
Component | undefined
undefined
替代文本后缀的展示型组件;测量布局时会额外挂载一份,因此应避免内部状态和副作用。
详情

声明类型

Component | undefined

默认值详情

解析值
undefined

来源

Counter.vue:26

packages/ui/src/components/counter/Counter.vue

animatePrefix
boolean | undefined
true
存在 prefixComponent 时是否渲染该组件;关闭后显示 prefix 文本。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
true

来源

Counter.vue:27

packages/ui/src/components/counter/Counter.vue

animateSuffix
boolean | undefined
true
存在 suffixComponent 时是否渲染该组件;关闭后显示 suffix 文本。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
true

来源

Counter.vue:28

packages/ui/src/components/counter/Counter.vue

separator
string | undefined
","
千位分隔符;设为空字符串可关闭千分位分组,但仍应用 decimalSeparator。
详情

声明类型

string | undefined

默认值详情

解析值
","

来源

Counter.vue:29

packages/ui/src/components/counter/Counter.vue

easing
"ease-out" | "linear" | "ease-in-out" | undefined
"ease-out"
动画进度使用的缓动函数。
详情

声明类型

"ease-out" | "linear" | "ease-in-out" | undefined

字面量

  • "ease-in-out"
  • "ease-out"
  • "linear"

默认值详情

解析值
"ease-out"

来源

Counter.vue:30

packages/ui/src/components/counter/Counter.vue

autoStart
boolean | undefined
true
挂载后自动开始动画;为 false 时数值停留在 from,也不会随 to/from 更新自动播放。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
true

来源

Counter.vue:31

packages/ui/src/components/counter/Counter.vue

variant
"accent" | "danger" | "default" | "primary" | "success" | undefined
"default"
数值文本的颜色变体,不改变卡片背景。
详情

声明类型

NonNullable<"default" | "primary" | "success" | "danger" | "accent" | null | undefined> | undefined

字面量

  • "accent"
  • "danger"
  • "default"
  • "primary"
  • "success"

默认值详情

解析值
"default"

来源

Counter.vue:32

packages/ui/src/components/counter/Counter.vue

size
"lg" | "md" | "sm" | "xl" | undefined
"md"
数值文字的字号预设。
详情

声明类型

NonNullable<"lg" | "sm" | "md" | "xl" | null | undefined> | undefined

字面量

  • "lg"
  • "md"
  • "sm"
  • "xl"

默认值详情

解析值
"md"

来源

Counter.vue:33

packages/ui/src/components/counter/Counter.vue

title
string | undefined
undefined
可选标题;提供后进入容器布局,标题插槽内容优先于该文本。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Counter.vue:34

packages/ui/src/components/counter/Counter.vue

card
boolean | undefined
false
为数值启用带边框、内边距和阴影的卡片容器。
详情

声明类型

boolean | undefined

字面量

  • false
  • true

默认值详情

解析值
false

来源

Counter.vue:35

packages/ui/src/components/counter/Counter.vue

valueStyle
CSSProperties | undefined
undefined
应用到数值区域外层元素的内联样式。
详情

声明类型

CSSProperties | undefined

默认值详情

解析值
undefined

来源

Counter.vue:36

packages/ui/src/components/counter/Counter.vue

class
string | undefined
undefined
追加到容器模式的外层容器;未启用容器模式时追加到数值文本元素。
详情

声明类型

string | undefined

默认值详情

解析值
undefined

来源

Counter.vue:37

packages/ui/src/components/counter/Counter.vue

Counter — 事件
名称签名或类型说明
@complete
[]
动画到达 to 时发出;减少动态效果偏好下直接显示目标值也会发出。
详情

声明类型

[]

来源

Counter.vue

packages/ui/src/components/counter/Counter.vue

Counter — 插槽
名称签名或类型说明
#title
{}
替换 title 属性的标题内容;提供插槽也会启用容器布局。
详情

声明类型

{}

来源

Counter.vue

packages/ui/src/components/counter/Counter.vue

Counter — 暴露成员
名称签名或类型说明
play
() => void
取消当前动画并从 from 重新播放;减少动态效果偏好下直接显示目标值。
详情

声明类型

() => void

来源

Counter.vue:137

packages/ui/src/components/counter/Counter.vue

stop
() => void
取消当前动画并停止继续更新数值。
详情

声明类型

() => void

来源

Counter.vue:137

packages/ui/src/components/counter/Counter.vue

可访问性 ​

  • ARIA 属性:数字内容对屏幕阅读器可访问

蛮力铸就。