Skip to content

v-progress

进度条动画。

起始版本: 1.5.0

用法

基本

vue
<template>
  <div v-progress="50">进度 50%</div>
</template>

带选项

vue
<template>
  <div v-progress="{
    value: progressValue,
    color: '#42b883',
    height: 8,
    showText: true
  }">
    内容
  </div>
</template>

不确定进度

vue
<template>
  <div v-progress="{ indeterminate: true }">
    加载中...
  </div>
</template>

条纹进度条

vue
<template>
  <div v-progress="{
    value: 70,
    striped: true,
    animated: true
  }">
    条纹动画进度条
  </div>
</template>

API

选项

选项类型默认值描述
valuenumber-当前进度值(0-100)
maxnumber100最大值
minnumber0最小值
heightnumber4进度条高度(像素)
colorstring'#42b883'进度条颜色
backgroundColorstring'rgba(0, 0, 0, 0.1)'背景颜色
durationnumber300过渡时长(毫秒)
showTextbooleanfalse是否显示百分比文本
animatebooleantrue是否开启动画
indeterminatebooleanfalse是否为不确定进度
stripedbooleanfalse是否显示条纹
animatedbooleanfalse条纹是否动画
position'top' | 'bottom''top'进度条位置
classstring-自定义类名
onChange(value: number, percent: number) => void-进度变化回调
onComplete() => void-进度完成回调

绑定值类型

ts
type ProgressBinding = number | ProgressOptions

Composable 用法

你也可以使用 useProgress composable 来实现相同功能:

vue
<script setup>
import { ref, onMounted } from 'vue'
import { useProgress } from 'directix'

const containerRef = ref(null)
const { value, percent, setValue, increment, decrement, reset, bind } = useProgress({ 
  value: 50,
  color: '#42b883',
  showText: true
})

onMounted(() => bind(containerRef.value))
</script>

<template>
  <div ref="containerRef"></div>
  <button @click="increment(10)">+10%</button>
  <button @click="decrement(10)">-10%</button>
  <button @click="reset">重置</button>
</template>

API

typescript
interface UseProgressOptions {
  /** 当前进度值 */
  value?: number | Ref<number>
  /** 最大值 */
  max?: number
  /** 最小值 */
  min?: number
  /** 进度条高度 */
  height?: number
  /** 进度条颜色 */
  color?: string
  /** 背景颜色 */
  backgroundColor?: string
  /** 过渡时长 */
  duration?: number
  /** 是否显示百分比文本 */
  showText?: boolean
  /** 是否为不确定进度 */
  indeterminate?: boolean | Ref<boolean>
  /** 是否显示条纹 */
  striped?: boolean
  /** 条纹是否动画 */
  animated?: boolean
  /** 进度变化回调 */
  onChange?: (value: number, percent: number) => void
  /** 进度完成回调 */
  onComplete?: () => void
}

interface UseProgressReturn {
  /** 当前值 */
  value: Ref<number>
  /** 当前百分比 */
  percent: Ref<number>
  /** 设置进度值 */
  setValue: (value: number) => void
  /** 增加进度 */
  increment: (amount?: number) => void
  /** 减少进度 */
  decrement: (amount?: number) => void
  /** 重置到最小值 */
  reset: () => void
  /** 绑定到元素 */
  bind: (element: HTMLElement) => () => void
}

基于 MIT 许可发布