沃梦达 / IT编程 / 前端开发 / 正文

Vue实现动态圆环百分比进度条

实现动态圆环百分比进度条的主要过程分为以下几步:

实现动态圆环百分比进度条的主要过程分为以下几步:

  1. 引入Vue、SVG等需要的依赖和工具
  2. 搭建Vue组件结构和布局
  3. 动态计算圆环的半径、圆心坐标等关键参数
  4. 使用SVG绘制圆环进度条
  5. 通过Vue数据驱动更新圆环的进度值

下面详细讲解每一步的实现过程。

1. 引入依赖和工具

首先需要引入Vue、SVG等需要的依赖和工具,可以在<head>标签中引入下列代码:

<head>
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="https://unpkg.com/svg.js@3.0.10/dist/svg.min.js"></script>
</head>

2. 搭建Vue组件结构和布局

接下来需要在Vue实例中搭建组件结构和布局,可以在<template>中编写如下代码:

<template>
  <svg :width="size" :height="size">
    <circle
      :cx="center"
      :cy="center"
      :r="radius"
      :stroke-width="strokeWidth"
      stroke="#ccc"
      fill="none"
    ></circle>
    <circle
      :cx="center"
      :cy="center"
      :r="radius"
      :stroke-width="strokeWidth"
      stroke="#fbc02d"
      fill="none"
      :stroke-dasharray="circumference"
      :stroke-dashoffset="-percentOffset"
    ></circle>
    <text 
      :x="center"
      :y="center"
      text-anchor="middle"
      dominant-baseline="central"
    >
      {{ percentage }}%
    </text>
  </svg>
</template>

3. 动态计算关键参数

接下来需要动态计算关键参数,包括圆环的半径、圆心坐标、圆环周长、圆环的起始和结束角度等。可以在Vue的计算属性中编写下列代码:

computed: {
  center() {
    return this.size / 2;
  },
  radius() {
    return this.center - this.strokeWidth / 2;
  },
  circumference() {
    return 2 * Math.PI * this.radius;
  },
  percentOffset() {
    return (100 - this.percentage) / 100 * this.circumference;
  }
}

4. 使用SVG绘制圆环进度条

接下来需要使用SVG绘制圆环进度条,可以在Vue的mounted生命周期函数中编写下列代码:

mounted() {
  const draw = SVG(this.$el);
  draw.node.style.border = '1px solid #ccc';
  draw.attr('viewBox', `0 0 ${this.size} ${this.size}`);
}

5. 通过Vue数据驱动更新进度条的进度值

最后,在Vue的methods中通过Vue数据驱动更新进度条的进度值,可以编写如下代码:

methods: {
  updateProgress() {
    setInterval(() => {
      this.percentage += 5;
      if (this.percentage > 100) {
        this.percentage = 0;
      }
    }, 1000);
  }
}

其中通过setInterval循环更新percentage值,每次更新值时调整圆环的stroke-dashoffset属性,从而让圆环进度条实时显示进度。

以上就是Vue实现动态圆环百分比进度条的完整攻略。以下是两条示例说明:

示例1:基本用法

<template>
  <div>
    <CircularProgress :percentage="percentage" />
    <button @click="updateProgress()">Update Progress</button>
  </div>
</template>

<script>
import CircularProgress from './CircularProgress.vue';

export default {
  components: { CircularProgress },
  data() {
    return {
      percentage: 0,
    };
  },
  methods: {
    updateProgress() {
      setInterval(() => {
        this.percentage += 5;
        if (this.percentage > 100) {
          this.percentage = 0;
        }
      }, 1000);
    }
  }
};
</script>

示例2:自定义样式和大小

<template>
  <div>
    <CircularProgress :percentage="percentage" :size="200" :strokeWidth="10" />
    <button @click="updateProgress()">Update Progress</button>
  </div>
</template>

<script>
import CircularProgress from './CircularProgress.vue';

export default {
  components: { CircularProgress },
  data() {
    return {
      percentage: 0,
    };
  },
  methods: {
    updateProgress() {
      setInterval(() => {
        this.percentage += 5;
        if (this.percentage > 100) {
          this.percentage = 0;
        }
      }, 1000);
    }
  }
};
</script>

<style>
svg {
  border: 1px solid #ccc;
  border-radius: 50%;
}
</style>

本文标题为:Vue实现动态圆环百分比进度条