当前位置:首页 > VUE

vue实现环形进度

2026-03-08 23:33:41VUE

Vue 环形进度条实现方法

使用 SVG 和 CSS 实现基础环形进度条

SVG 的 circle 元素可以轻松创建环形进度条。通过计算 stroke-dasharraystroke-dashoffset 属性来实现进度效果。

<template>
  <div class="circular-progress">
    <svg viewBox="0 0 100 100">
      <circle
        cx="50"
        cy="50"
        r="45"
        fill="none"
        stroke="#e6e6e6"
        stroke-width="10"
      />
      <circle
        cx="50"
        cy="50"
        r="45"
        fill="none"
        stroke="#4CAF50"
        stroke-width="10"
        :stroke-dasharray="circumference"
        :stroke-dashoffset="dashOffset"
      />
    </svg>
    <div class="progress-text">{{ progress }}%</div>
  </div>
</template>

<script>
export default {
  props: {
    progress: {
      type: Number,
      default: 0,
      validator: value => value >= 0 && value <= 100
    }
  },
  computed: {
    circumference() {
      return 2 * Math.PI * 45;
    },
    dashOffset() {
      return this.circumference * (1 - this.progress / 100);
    }
  }
};
</script>

<style>
.circular-progress {
  position: relative;
  width: 100px;
  height: 100px;
}

.progress-text {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 20px;
}
</style>

使用第三方库 vue-circle-progress

对于更复杂的需求,可以使用专门为 Vue 设计的进度条库。

vue实现环形进度

安装依赖:

npm install vue-circle-progress

使用示例:

vue实现环形进度

<template>
  <circle-progress
    :percent="progress"
    :size="200"
    :border-width="15"
    :border-bg-width="15"
    fill-color="#4CAF50"
    empty-color="#e6e6e6"
  />
</template>

<script>
import CircleProgress from "vue-circle-progress";

export default {
  components: {
    CircleProgress
  },
  props: {
    progress: {
      type: Number,
      default: 0
    }
  }
};
</script>

动画效果实现

为进度条添加平滑的过渡动画,可以通过 CSS 过渡或 JavaScript 动画实现。

<template>
  <div class="circular-progress">
    <svg viewBox="0 0 100 100">
      <circle class="progress-bg" ... />
      <circle
        class="progress-bar"
        ...
        :style="{ 'stroke-dashoffset': dashOffset }"
      />
    </svg>
  </div>
</template>

<style>
.progress-bar {
  transition: stroke-dashoffset 0.5s ease-in-out;
  transform: rotate(-90deg);
  transform-origin: 50% 50%;
}
</style>

自定义环形进度条

通过 props 允许自定义颜色、大小等属性,使组件更灵活。

<template>
  <div
    class="circular-progress"
    :style="{ width: size + 'px', height: size + 'px' }"
  >
    <svg viewBox="0 0 100 100">
      <circle ... :stroke="backgroundColor" />
      <circle ... :stroke="progressColor" />
    </svg>
  </div>
</template>

<script>
export default {
  props: {
    size: {
      type: Number,
      default: 100
    },
    backgroundColor: {
      type: String,
      default: '#e6e6e6'
    },
    progressColor: {
      type: String,
      default: '#4CAF50'
    }
  }
};
</script>

这些方法提供了从简单到复杂的环形进度条实现方案,可以根据项目需求选择合适的方案。SVG 方案提供了最大的灵活性,而第三方库则可以快速实现标准化的进度条效果。

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

相关文章

vue实现进度圈效果

vue实现进度圈效果

使用 SVG 和 CSS 动画实现进度圈 在 Vue 中实现进度圈效果可以通过 SVG 结合 CSS 动画或 JavaScript 动态计算完成。以下是两种常见方法: 方法一:基于 SVG 的环形进…

vue实现视频进度加载

vue实现视频进度加载

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

css制作环形

css制作环形

使用 border-radius 和 border 属性 通过设置元素的 border-radius 为 50% 将其变为圆形,再通过 border 属性控制边框宽度和颜色。调整宽度和高度相同,边框透…

css环形图制作

css环形图制作

使用CSS制作环形图 CSS环形图可以通过多种方法实现,包括使用border-radius、conic-gradient以及SVG等技术。以下是几种常见的方法: 使用border-radius和伪元…

php实现快递进度

php实现快递进度

实现快递进度查询的PHP方法 使用快递鸟API 快递鸟提供物流查询API接口,支持多家快递公司。需注册账号获取API Key和商户ID。 // 配置参数 $appKey = '你的AppKe…

php如何实现下载进度

php如何实现下载进度

在PHP中实现下载进度显示需要结合服务器端和客户端的协作,以下是几种常见方法: 使用输出缓冲和分块传输 通过分块发送文件数据并计算进度: $file = 'large_file.zip';…