当前位置:首页 > 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>

添加样式

<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前端实现下载进度

实现下载进度条的基本思路 在Vue中实现下载进度条,通常需要结合XMLHttpRequest或Fetch API来监听下载进度事件。通过计算已下载数据与总数据的比例,动态更新进度条的显示。 使用XM…

vue实现环形菜单

vue实现环形菜单

实现环形菜单的基本思路 环形菜单通常指围绕中心点呈圆形排列的菜单项,点击后可能有展开或选中效果。Vue实现的核心在于计算每个菜单项的位置和动态交互。 基础HTML结构 <template&g…

vue实现视频进度加载

vue实现视频进度加载

实现视频进度加载的基本思路 在Vue中实现视频进度加载通常涉及监听视频的timeupdate事件,计算当前播放时间与总时长的比例,并更新进度条显示。核心是通过<video>元素的API和自…

vue实现打卡进度组件

vue实现打卡进度组件

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

react如何获取执行进度信息

react如何获取执行进度信息

获取执行进度的方法 在React中获取执行进度信息通常涉及异步操作(如数据加载、文件上传等)的状态跟踪。以下是几种常见实现方式: 使用自定义状态管理 通过React的useState和useEffe…