当前位置:首页 > VUE

vue实现环形进度组件

2026-01-20 02:49:41VUE

实现环形进度组件

环形进度组件可以通过SVG或Canvas实现,以下是基于SVG的实现方法:

定义组件模板

<template>
  <div class="circle-progress">
    <svg :width="size" :height="size" viewBox="0 0 100 100">
      <circle 
        cx="50" 
        cy="50" 
        :r="radius" 
        fill="none" 
        :stroke="backgroundColor" 
        :stroke-width="strokeWidth"
      />
      <circle 
        cx="50" 
        cy="50" 
        :r="radius" 
        fill="none" 
        :stroke="progressColor" 
        :stroke-width="strokeWidth"
        :stroke-dasharray="dashArray"
        :stroke-dashoffset="dashOffset"
        stroke-linecap="round"
      />
      <text 
        x="50" 
        y="50" 
        text-anchor="middle" 
        dominant-baseline="middle"
        :fill="textColor"
      >
        {{ progress }}%
      </text>
    </svg>
  </div>
</template>

定义组件逻辑

<script>
export default {
  props: {
    progress: {
      type: Number,
      default: 0,
      validator: value => value >= 0 && value <= 100
    },
    size: {
      type: Number,
      default: 200
    },
    strokeWidth: {
      type: Number,
      default: 10
    },
    backgroundColor: {
      type: String,
      default: '#eee'
    },
    progressColor: {
      type: String,
      default: '#42b983'
    },
    textColor: {
      type: String,
      default: '#333'
    }
  },
  computed: {
    radius() {
      return 50 - this.strokeWidth / 2
    },
    circumference() {
      return 2 * Math.PI * this.radius
    },
    dashArray() {
      return this.circumference
    },
    dashOffset() {
      return this.circumference * (1 - this.progress / 100)
    }
  }
}
</script>

添加样式

vue实现环形进度组件

<style scoped>
.circle-progress {
  display: inline-block;
  position: relative;
}

.circle-progress circle {
  transition: stroke-dashoffset 0.5s ease;
}
</style>

使用组件示例

<template>
  <div>
    <circle-progress :progress="75" />
  </div>
</template>

<script>
import CircleProgress from './CircleProgress.vue'

export default {
  components: {
    CircleProgress
  }
}
</script>

自定义选项说明

  1. progress:进度值,范围0-100
  2. size:组件大小,单位为px
  3. strokeWidth:圆环宽度
  4. backgroundColor:背景圆环颜色
  5. progressColor:进度圆环颜色
  6. textColor:文本颜色

动画效果

组件已经内置了过渡动画,当progress值变化时会有平滑的动画效果。可以通过调整CSS中的transition属性来修改动画时长和缓动函数。

标签: 环形进度
分享给朋友:

相关文章

vue实现文字环形排列

vue实现文字环形排列

环形文字排列的实现方法 在Vue中实现文字环形排列可以通过CSS和JavaScript结合的方式完成。以下是具体实现步骤: 使用CSS transform属性 通过CSS的transform属性旋转…

vue实现打卡进度组件

vue实现打卡进度组件

Vue 打卡进度组件实现 核心思路 通过动态计算已完成天数与总天数的比例,结合 CSS 动画或过渡效果,实现进度条或日历形式的打卡可视化。 基础进度条实现 模板部分 <template&…

css制作环形

css制作环形

使用CSS制作环形 制作环形有多种方法,以下是几种常见且实用的CSS实现方式: 使用border-radius和border属性 通过设置元素的border-radius为50%使其变为圆形,再通过…

css环形图制作

css环形图制作

使用 CSS 和 SVG 制作环形图 CSS 结合 SVG 可以轻松实现环形图效果。以下是一个简单的方法: <svg viewBox="0 0 100 100" class="donut"&g…

php下载进度实现

php下载进度实现

PHP 下载进度实现 在 PHP 中实现下载进度显示通常需要结合前端和后端技术,以下是一种常见的实现方法: 使用 PHP 的 readfile() 或 fread() 结合 JavaScript 这…

php实现环形链表

php实现环形链表

环形链表的实现原理 环形链表是一种特殊的链表数据结构,其最后一个节点的指针不是指向null,而是指向链表中的某个节点(通常是头节点),形成一个闭环。这种结构常用于实现循环队列、轮询调度等场景。 PH…