vue圆环进度条_Vue实现环形进度条方法组件

该博客介绍如何在Vue中创建一个动态的环形进度条组件。通过设置初始值、总值以及使用定时器更新进度,实现进度条从0%到指定百分比的平滑过渡。组件还包括样式调整,如不同阶段的进度颜色变化。
{{InitialVal }}

{{datas.title}}

{{datas.description}}

export default {

data () {

return {

msg : 'ring',

InitialVal : 0,

isActive : {

circle : false,

right : true

}

}

},

props:{

'datas':Object,

// 'sum':Number,

// 'titles':String,

// 'description':String,

},

methods:{

},

mounted(){//挂载结束调用的函数

var percent = 0

var sum = this.datas.sum;

var _this = this;

var loading=setInterval(function(){

if(percent == sum){

clearTimeout(loading);

}

if(percent>50){

_this.isActive.right = false;

_this.isActive.circle = true;

}

_this.InitialVal = percent;

percent++;

},10);

}

}

*{

margin: 0;

padding: 0;

}

.wrap,.circle,.percent{

position: absolute;

width: 100px;

height: 100px;

border-radius: 50%;

}

.wrap{

position: relative;

top:50px;

left:50px;

display: inline-block;

background-color: #ccc;

}

.circle{

box-sizing: border-box;

border:20px solid #ccc;

clip:rect(0,100px,100px,50px);

}

.clip-auto{

clip:rect(auto, auto, auto, auto);

}

.percent{

box-sizing: border-box;

top:-20px;

left:-20px;

}

.left{

transition:transform ease;

border:20px solid #00ff00;

clip: rect(0,50px,100px,0);

}

.right{

border:20px solid #00ff00;

clip: rect(0,100px,100px,50px);

}

.wth0{

width:0;

}

.num{

position: absolute;

box-sizing: border-box;

width: 60px;

height: 60px;

line-height: 60px;

text-align: center;

font-size: 40px;

left: 20px;

top: 20px;

border-radius: 50%;

background-color: #fff;

z-index: 1;

}

.ring-title{

width: 100%;

position: absolute;

bottom: -50px;

text-align: center;

}

### 关于 Vue实现圆环进度条Vue 生态中,可以通过多种方式来实现圆环进度条的功能。以下是几种常见的方法及其对应的示例代码。 #### 方法一:使用第三方插件 `vue-circle-progress` `vue-circle-progress` 是一个专门用于绘制动画圆形进度条Vue 组件[^1]。它提供了简单易用的 API 来创建动态的圆环进度条。 ```html <template> <div> <circle-progress :percent="75" :size="100" :thickness="8" empty-fill="rgba(0, 0, 0, .1)" fill="#FFB400"> </circle-progress> </div> </template> <script> import CircleProgress from 'vue-circle-progress'; export default { components: { CircleProgress } }; </script> ``` 此插件支持设置进度百分比、尺寸、线条粗细以及填充颜色等属性[^1]。 --- #### 方法二:基于 Canvas 手动实现 如果希望更灵活地定制圆环进度条,则可以利用 HTML5 的 `<canvas>` 元素手动绘制。这种方式允许完全掌控样式和行为。 ```javascript <template> <div> <canvas id="progress-ring" width="200" height="200"></canvas> </div> </template> <script> export default { mounted() { const canvas = document.getElementById('progress-ring'); const ctx = canvas.getContext('2d'); const centerX = canvas.width / 2; const centerY = canvas.height / 2; const radius = 70; function drawCircle(percent) { ctx.clearRect(0, 0, canvas.width, canvas.height); // 背景圈 ctx.beginPath(); ctx.arc(centerX, centerY, radius, 0, Math.PI * 2); ctx.strokeStyle = '#eaeaea'; ctx.lineWidth = 15; ctx.stroke(); // 进度圈 ctx.beginPath(); const endAngle = (Math.PI * 2 * percent) / 100; ctx.arc(centerX, centerY, radius, -Math.PI / 2, endAngle - Math.PI / 2); ctx.strokeStyle = '#FFB400'; ctx.stroke(); } let currentPercent = 0; setInterval(() => { if (currentPercent >= 75) return; currentPercent += 1; drawCircle(currentPercent); }, 30); }, }; </script> ``` 通过调整参数(如半径、宽度、角度),可以轻松改变圆环的外观[^2]。 --- #### 方法三:借助 Element Plus 和 CSS 自定义 对于使用 Vue 3 并集成 Element Plus 的开发者来说,可以直接利用其内置的 `el-progress` 组件,并通过深度样式修改实现渐变色或其他复杂效果[^3]。 ```html <template> <el-progress type="dashboard" :percentage="75" color="#ff9900"></el-progress> </template> <style scoped> /* 强制覆盖默认样式 */ :deep(.el-progress-circle__path) { stroke: v-bind(customColor) !important; stroke-linecap: round; /* 圆角端点 */ } </style> <script> export default { data() { return { customColor: "#FFB400", }; }, }; </script> ``` Element Plus 提供了丰富的选项来自定义进度条的颜色、形状以及其他视觉特性[^3]。 --- #### 方法四:适用于 Uni-app 的解决方案 如果你正在开发跨平台应用(如 H5、微信小程序、iOS/Android 应用等),则可以选择 uni-app 提供的相关组件或自行封装[^4]。 ```html <view class="progress-container"> <canvas canvas-id="half-circle-progress" style="width: 200px; height: 100px;"></canvas> </view> <script> export default { onReady() { const context = wx.createCanvasContext('half-circle-progress', this); const centerX = 100; const centerY = 50; const radius = 40; // 绘制背景半圆 context.setLineWidth(10); context.setStrokeStyle('#ccc'); context.beginPath(); context.arc(centerX, centerY, radius, Math.PI, 0); context.stroke(); // 动态绘制进度 context.setStrokeStyle('#FFB400'); context.beginPath(); const angle = ((this.progressValue / 100) * Math.PI).toFixed(2); // 计算当前角度 context.arc(centerX, centerY, radius, Math.PI, Math.PI - angle); context.stroke(); }, data() { return { progressValue: 75, }; }, }; </script> ``` 以上代码展示了如何在 uni-app 环境下构建一个简单的半圆进度条[^4]。 --- ### 总结 无论是采用成熟的第三方库还是手写逻辑,Vue 都能很好地满足不同场景下的需求。具体选择取决于项目的实际要求和技术栈偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值