vue3实现环形进度条组件

vue3实现环形进度条组件在pc后台系统尤为常见统计数据面板,有时候简单的组件使用框架不满足或者改样式起来费劲还不如自己手写一个~接下来步骤上干货

效果演示
代码实现

创建 ProgressCircle.vue 组件 代码如下:

<template>
  <div
    :style="{ width: size + 'px', height: size + 'px' }"
    class="progress-circle"
  >
    <svg :width="size" :height="size" viewBox="0 0 100 100">
      <circle
        class="background"
        cx="50"
        cy="50"
        r="45"
        stroke-width="5"
        fill="none"
      />
      <circle
        class="progress"
        cx="50"
        cy="50"
        r="45"
        stroke-width="5"
        :stroke="color"
        fill="none"
        stroke-dasharray="282"
        :stroke-dashoffset="282 - (computedProgress / 100) * 282"
        style="transition: stroke-dashoffset 0.6s"
      />
    </svg>
    <div class="text" :style="{ fontSize: size / 5 + 'px' }">{{ text }}</div>
  </div>
</template>

<script setup lang="ts">
import { ref, onMounted } from 'vue'

const props = defineProps<{
  progress?: number
  color?: string
  size?: number
  text?: string
  duration?: number
}>()

// 设置默认值
const defaultProgress = 50
const defaultColor = 'red'
const defaultSize = 100
const defaultDuration = 500
const defaultText = '50%' // 默认文案

const computedProgress = ref(0)
const color = ref(props.color ?? defaultColor) // 使用传入的颜色或默认颜色
const size = ref(props.size ?? defaultSize) // 使用传入的大小或默认大小
const text = ref(props.text ?? defaultText) // 使用传入的文本或默认文本

onMounted(() => {
  setTimeout(() => {
    computedProgress.value = props.progress ?? defaultProgress
  }, props.duration ?? defaultDuration)
})
</script>

<style scoped>
.progress-circle {
  display: flex;
  justify-content: center;
  align-items: center;
  position: relative;
}

svg {
  transform: rotate(-90deg);
}

circle.background {
  stroke: #eee;
}

circle.progress {
  stroke-linecap: round;
  transition: stroke-dashoffset 0.8s ease;
}

.text {
  position: absolute;
  font-weight: bold;
}
</style>
组件调用
<template>
  <div class="app">
    <ProgressCircle :progress="50" />
    <ProgressCircle :progress="30" color="orange" text="30%" />
    <ProgressCircle :progress="85" color="green" text="85%" />
  </div>
</template>

<script setup>
import ProgressCircle from './components/ProgressCircle.vue'
</script>
说明
  • stroke-dasharray 设置为圆周长(大约 282),以支持饱满的进度绘制。
  • stroke-dashoffset 动态计算,以显示特定进度(computedProgress 为当前进度百分比)。
  • stroke-linecap 属性用于设置圆角效果,使进度开始和结束位置更圆滑。
总结

实现起来并不难,这样就很简单的实现了带动画效果的环形进度条了,有需要的朋友可以基于此自己二次开发或者设计,兴许哪天你也用上了。并且可以扩展成自己想要的风格了

原文:https://juejin.cn/post/7424095770275954739

Vue3中使用Echarts环形进度条,可以按照以下步骤进行操作: 1. 首先,确保你已经安装了ECharts库,可以通过npm或yarn进行安装。 2. 在Vue项目中引入ECharts库。你可以在main.js文件中全局引入ECharts,或者在需要使用环形进度条组件中引入。 3. 在组件中创建一个canvas元素作为容器来显示环形进度条。可以使用Vue的指令v-if来判断是否显示环形进度条。 4. 定义环形进度条的配置对象,可以在data选项中定义一个progressOptions对象,其中包含了环形进度条的设置。可以引用上述的引用和引用中提到的设置。 5. 在mounted钩子函数中使用ECharts的init方法来初始化环形进度条,并传入之前创建的canvas容器和配置对象。 6. 在Vue的computed属性中定义一个函数,利用该函数来更新环形进度条的数据。可以在函数中修改progressOptions对象的data属性来更新进度条的数值。 7. 在模板中使用canvas元素来展示环形进度条。 下面是一个示例代码: ```vue <template> <div> <canvas v-if="showProgress" ref="progressChart"></canvas> </div> </template> <script> import * as echarts from 'echarts'; export default { data() { return { showProgress: true, progressOptions: { series: [{ type: 'pie', radius: ['60%', '70%'], center: ['50%', '50%'], label: { show: false, }, data: [ { value: 50, name: '完成' }, { value: 50, name: '剩余' }, ], itemStyle: { normal: { color: '#f5f5f5', borderWidth: 10, borderColor: '#f5f5f5', borderType: 'solid', }, emphasis: { color: '#f5f5f5', }, }, }], }, }; }, mounted() { const chart = echarts.init(this.$refs.progressChart); chart.setOption(this.progressOptions); }, }; </script> ``` 这是一个基本的示例,你可以根据你的需求来修改配置对象和模板代码。通过上述步骤,你就可以在Vue3中使用ECharts来创建一个环形进度条了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Echarts 环形进度条 环形图嵌套](https://blog.csdn.net/Windyluna/article/details/120026774)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值