当前位置:首页 > VUE

vue实现圆环进度

2026-01-17 03:48:29VUE

Vue 实现圆环进度的方法

使用 SVG 实现圆环进度

SVG 是实现圆环进度的常用方法,通过 stroke-dasharraystroke-dashoffset 属性可以轻松控制进度条的显示。

vue实现圆环进度

<template>
  <div class="progress-ring">
    <svg width="120" height="120">
      <circle
        class="progress-ring__background"
        stroke="#eee"
        stroke-width="10"
        fill="transparent"
        r="50"
        cx="60"
        cy="60"
      />
      <circle
        class="progress-ring__circle"
        stroke="#4CAF50"
        stroke-width="10"
        fill="transparent"
        r="50"
        cx="60"
        cy="60"
        :stroke-dasharray="circumference"
        :stroke-dashoffset="offset"
      />
    </svg>
  </div>
</template>

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

<style>
.progress-ring {
  display: inline-block;
}
.progress-ring__circle {
  transition: stroke-dashoffset 0.35s;
  transform: rotate(-90deg);
  transform-origin: 50% 50%;
}
</style>

使用 Canvas 实现圆环进度

Canvas 也可以用于绘制圆环进度,适合需要动态渲染的场景。

vue实现圆环进度

<template>
  <div class="progress-ring">
    <canvas ref="canvas" width="120" height="120"></canvas>
  </div>
</template>

<script>
export default {
  props: {
    progress: {
      type: Number,
      default: 0,
      validator: value => value >= 0 && value <= 100
    }
  },
  mounted() {
    this.drawProgress();
  },
  watch: {
    progress() {
      this.drawProgress();
    }
  },
  methods: {
    drawProgress() {
      const canvas = this.$refs.canvas;
      const ctx = canvas.getContext('2d');
      const centerX = canvas.width / 2;
      const centerY = canvas.height / 2;
      const radius = 50;
      const startAngle = -Math.PI / 2;
      const endAngle = startAngle + (2 * Math.PI * this.progress / 100);

      ctx.clearRect(0, 0, canvas.width, canvas.height);

      // 绘制背景圆环
      ctx.beginPath();
      ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);
      ctx.strokeStyle = '#eee';
      ctx.lineWidth = 10;
      ctx.stroke();

      // 绘制进度圆环
      ctx.beginPath();
      ctx.arc(centerX, centerY, radius, startAngle, endAngle);
      ctx.strokeStyle = '#4CAF50';
      ctx.lineWidth = 10;
      ctx.stroke();
    }
  }
};
</script>

使用 CSS 实现圆环进度

CSS 的 conic-gradient 可以用于实现圆环进度,但兼容性较差。

<template>
  <div class="progress-ring">
    <div class="progress-ring__container">
      <div class="progress-ring__fill" :style="{ '--progress': progress }"></div>
    </div>
  </div>
</template>

<style>
.progress-ring__container {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: conic-gradient(#4CAF50 calc(var(--progress) * 3.6deg), #eee 0deg);
  display: flex;
  align-items: center;
  justify-content: center;
}
.progress-ring__fill {
  width: 100px;
  height: 100px;
  background: white;
  border-radius: 50%;
}
</style>

使用第三方库(如 Vuetify)

如果项目中使用了 Vuetify,可以直接使用其内置的 v-progress-circular 组件。

<template>
  <v-progress-circular
    :value="progress"
    :size="120"
    :width="10"
    color="primary"
  >
    {{ progress }}%
  </v-progress-circular>
</template>

<script>
export default {
  props: {
    progress: {
      type: Number,
      default: 0,
      validator: value => value >= 0 && value <= 100
    }
  }
};
</script>

以上方法可以根据项目需求选择适合的实现方式。SVG 和 Canvas 适合自定义需求,而第三方库可以快速集成。

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

相关文章

vue实现环形进度组件

vue实现环形进度组件

实现环形进度组件 环形进度组件可以通过SVG或Canvas实现,以下是基于SVG的实现方法: 定义组件模板 <template> <div class="circle-pro…

vue实现视频进度加载

vue实现视频进度加载

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

vue实现打卡进度组件

vue实现打卡进度组件

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

圆环css制作

圆环css制作

圆环CSS制作方法 使用CSS制作圆环可以通过多种方式实现,以下是几种常见的方法: 方法一:使用border-radius和border 通过设置元素的border-radius为50%使其成为圆…

css圆环制作

css圆环制作

使用border-radius和边框制作圆环 通过设置元素的宽高相等,并利用border-radius: 50%将其变为圆形。通过调整边框宽度和颜色,可以形成圆环效果。透明背景或边框颜色差异能突出圆环…