当前位置:首页 > VUE

vue实现进度圈效果

2026-02-22 13:26:51VUE

Vue 实现进度圈效果

使用 SVG 和 CSS 动画

通过 SVG 的 circle 元素和 CSS 动画实现动态进度圈效果。以下是一个基础实现示例:

<template>
  <div class="progress-circle">
    <svg width="100" height="100" viewBox="0 0 100 100">
      <circle
        class="progress-background"
        cx="50"
        cy="50"
        r="45"
        fill="none"
        stroke="#e6e6e6"
        stroke-width="8"
      />
      <circle
        class="progress-bar"
        cx="50"
        cy="50"
        r="45"
        fill="none"
        stroke="#42b983"
        stroke-width="8"
        :stroke-dasharray="dashArray"
        :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: {
    dashArray() {
      return Math.PI * 90;
    },
    dashOffset() {
      return this.dashArray * (1 - this.progress / 100);
    }
  }
};
</script>

<style>
.progress-circle {
  position: relative;
  width: 100px;
  height: 100px;
}
.progress-text {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 16px;
}
.progress-bar {
  transition: stroke-dashoffset 0.5s ease;
}
</style>

使用第三方库(如 vue-progress-circle)

对于更复杂的需求,可以使用现成的 Vue 组件库:

安装依赖:

npm install vue-progress-circle

使用示例:

<template>
  <vue-progress-circle
    :progress="progress"
    :size="100"
    :line-width="8"
    :fill-color="'#e6e6e6'"
    :progress-color="'#42b983'"
  />
</template>

<script>
import VueProgressCircle from 'vue-progress-circle';

export default {
  components: {
    VueProgressCircle
  },
  data() {
    return {
      progress: 75
    };
  }
};
</script>

自定义动画效果

通过 Vue 的过渡和动画系统,可以添加更丰富的交互效果:

<template>
  <div class="animated-circle">
    <svg width="120" height="120" viewBox="0 0 120 120">
      <circle
        class="base-circle"
        cx="60"
        cy="60"
        r="50"
      />
      <circle
        class="progress-circle"
        cx="60"
        cy="60"
        r="50"
        :style="circleStyle"
      />
    </svg>
  </div>
</template>

<script>
export default {
  props: ['progress'],
  computed: {
    circleStyle() {
      const circumference = 2 * Math.PI * 50;
      return {
        strokeDasharray: circumference,
        strokeDashoffset: circumference * (1 - this.progress / 100),
        transition: 'stroke-dashoffset 0.8s cubic-bezier(0.4, 0, 0.2, 1)'
      };
    }
  }
};
</script>

<style>
.animated-circle {
  position: relative;
  width: 120px;
  height: 120px;
}
.base-circle {
  fill: none;
  stroke: #eee;
  stroke-width: 8;
}
.progress-circle {
  fill: none;
  stroke: #ff7043;
  stroke-width: 8;
  transform: rotate(-90deg);
  transform-origin: 50% 50%;
}
</style>

响应式设计技巧

确保进度圈在不同设备上表现一致:

.progress-container {
  width: 100%;
  max-width: 200px;
  margin: 0 auto;
}
.progress-circle {
  width: 100%;
  height: auto;
}
@media (max-width: 768px) {
  .progress-circle {
    width: 80px;
    height: 80px;
  }
}

以上方法提供了从基础到进阶的多种实现方式,可根据项目需求选择合适方案。SVG 方案具有最佳的性能和灵活性,而第三方库则能快速实现标准化效果。

vue实现进度圈效果

标签: 进度效果
分享给朋友:

相关文章

vue实现拖拉效果

vue实现拖拉效果

实现拖拽效果的基本方法 在Vue中实现拖拽效果可以通过原生HTML5的拖拽API或第三方库如vuedraggable来完成。以下是两种常见方法的详细说明。 使用HTML5拖拽API HTML5提供了…

vue实现对话框效果

vue实现对话框效果

Vue 对话框实现方法 使用组件化方式封装对话框 创建一个独立的对话框组件(如Dialog.vue),通过v-model控制显示隐藏: <template> <div cla…

vue实现效果

vue实现效果

Vue 实现常见效果的方法 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现表单元素与数据的双向绑定。例如输入框与数据的实时同步: <input v-model=…

vue实现框架效果

vue实现框架效果

Vue实现框架效果的方法 使用Vue实现框架效果可以通过多种方式完成,包括使用Vue Router、动态组件或第三方UI库。以下是几种常见的方法: 使用Vue Router实现布局框架 Vue Ro…

vue实现吸附效果

vue实现吸附效果

实现吸附效果的基本思路 吸附效果通常指当页面滚动到某个位置时,元素固定在视口的特定位置。Vue中可以通过监听滚动事件结合CSS的position: sticky或动态样式切换实现。 使用CSS的p…

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fi…