Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue 自定义进度条组件封装及使用方法详解

Vue 自定义进度条组件封装及使用方法详解

原创
作者头像
小焱
发布于 2025-06-07 00:08:48
发布于 2025-06-07 00:08:48
13201
代码可运行
举报
文章被收录于专栏:前端开发前端开发
运行总次数:1
代码可运行

下面我将为你详细讲解自定义进度条组件的使用方法以及组件封装的具体步骤。

自定义进度条组件使用方法

1. 组件引入与注册

要在项目里使用自定义进度条组件,首先得把组件引入到需要使用它的文件中,然后进行注册。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import CustomProgress from './components/CustomProgress.vue';

export default {
  components: {
    CustomProgress
  },
  // 组件的其他选项
}
2. 基础使用示例

下面是一个基础的使用示例,展示了如何向组件传递基本的数据。

代码语言:html
AI代码解释
复制
<CustomProgress
  :segmentsData="[
    { value: 30, color: '#409EFF', content: '阶段一' },
    { value: 50, color: '#67C23A', content: '阶段二' },
    { value: 20, color: '#E6A23C', content: '阶段三' }
  ]"
  :totalValue="100"
/>
3. 常用属性配置

组件提供了多个属性,可对进度条的外观和行为进行灵活配置:

  • segmentsData(必需):该属性为数组类型,用于定义进度条的各个分段。每个分段对象包含以下字段:
    • value(必需):表示该分段的进度值。
    • color(必需):用于设置该分段的显示颜色。
    • content(可选):是该分段需要显示的文本内容。
  • totalValue(可选,默认值为100):它是进度条的总值,各分段的value总和可以超过此值,超出部分会以红色显示。
  • showContent(可选,默认值为false):这是一个布尔值,用于控制是否显示分段的内容。
  • isAnimated(可选,默认值为false):同样是布尔值,用于控制是否启用进度条的动画效果。
4. 高级使用示例

下面是一个包含各种配置选项的高级使用示例:

代码语言:html
AI代码解释
复制
<CustomProgress
  :segmentsData="[
    { value: 25, color: '#3498db', content: '数据准备' },
    { value: 45, color: '#2ecc71', content: '处理中' },
    { value: 30, color: '#f39c12', content: '完成' }
  ]"
  :totalValue="100"
  :showContent="true"
  :isAnimated="true"
/>

组件封装方法

1. 组件文件结构

自定义进度条组件的文件结构如下:

代码语言:txt
AI代码解释
复制
components/
  └── CustomProgress/
      ├── CustomProgress.vue    # 主组件文件
      └── index.js              # 组件导出文件(可选)
2. 完整组件代码

下面是完整的组件代码,你可以直接复制到项目中使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div class="progress-bar-container">
    <div class="progress-bar-wrapper" :style="{ height: barHeight }">
      <div class="progress-bar" :class="{ 'with-animation': isAnimated }">
        <div
          v-for="(segment, index) in computedSegments"
          :key="index"
          :style="{ width: segment.width, backgroundColor: segment.color }"
          class="progress-segment"
        >
          <div
            v-if="showContent && segment.content"
            class="segment-content"
            :style="{ color: segment.textColor || '#fff' }"
          >
            {{ segment.content }}
          </div>
        </div>
        <div v-if="hasExceed" class="exceed-indicator"></div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'CustomProgress',
  props: {
    segmentsData: {
      type: Array,
      default: () => []
    },
    totalValue: {
      type: Number,
      default: 100
    },
    showContent: {
      type: Boolean,
      default: false
    },
    isAnimated: {
      type: Boolean,
      default: false
    },
    barHeight: {
      type: String,
      default: '30px'
    }
  },
  computed: {
    computedSegments() {
      let currentValue = 0;
      return this.segmentsData.map((segment, index) => {
        const percentage = (segment.value / this.totalValue) * 100;
        const width = `${percentage}%`;
        const isLast = index === this.segmentsData.length - 1;
        const isExceed = currentValue + segment.value > this.totalValue;
        
        currentValue += segment.value;
        
        return {
          ...segment,
          width,
          isLast,
          isExceed,
          displayValue: isExceed ? this.totalValue - currentValue + segment.value : segment.value
        };
      });
    },
    hasExceed() {
      return this.computedSegments.some(segment => segment.isExceed);
    }
  }
}
</script>

<style scoped>
.progress-bar-container {
  width: 100%;
  margin: 10px 0;
}

.progress-bar-wrapper {
  position: relative;
  overflow: hidden;
  border-radius: 4px;
  background-color: #f5f5f5;
  box-shadow: inset 0 1px 2px rgba(0,0,0,.1);
}

.progress-bar {
  display: flex;
  height: 100%;
  position: relative;
  transition: width 0.6s ease;
}

.progress-segment {
  position: relative;
  height: 100%;
  transition: width 0.6s ease;
}

.segment-content {
  position: absolute;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: bold;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  padding: 0 5px;
}

.exceed-indicator {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  background-color: #e74c3c;
  z-index: 10;
  transition: width 0.6s ease;
}

.with-animation::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.2) 50%, rgba(255,255,255,0) 100%);
  transform: translateX(-100%);
  animation: progress-animation 1.5s infinite;
}

@keyframes progress-animation {
  100% {
    transform: translateX(100%);
  }
}
</style>
3. 组件导出与全局注册

如果你希望在整个应用中都能使用这个组件,可以在index.js文件中对其进行导出,并在应用入口处进行全局注册。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// components/CustomProgress/index.js
import CustomProgress from './CustomProgress.vue';

export default {
  install(Vue) {
    Vue.component('CustomProgress', CustomProgress);
  }
};

// main.js(应用入口文件)
import Vue from 'vue';
import App from './App.vue';
import CustomProgress from './components/CustomProgress';

Vue.use(CustomProgress);

new Vue({
  render: h => h(App),
}).$mount('#app');
4. 组件优化建议

为了让组件更加完善,你可以考虑以下优化方向:

  1. 添加主题支持:可以通过增加theme属性,使组件支持不同的主题风格,如浅色主题、深色主题等。
  2. 自定义动画效果:新增animationType属性,让用户能够选择不同的动画效果,如渐变动画、进度条填充动画等。
  3. 响应式设计:使进度条能够根据容器的大小自动调整样式,确保在各种屏幕尺寸下都有良好的显示效果。
  4. 添加事件回调:增加如onProgressComplete等事件,在进度完成时触发相应的回调函数。

通过以上的使用方法和组件封装步骤,你可以轻松地在Vue项目中集成和使用这个自定义进度条组件。如果有特定的功能需求或者遇到问题,欢迎随时与我交流。


Vue, 自定义组件,进度条组件,组件封装,组件使用方法,Vue 组件开发,前端开发,JavaScript,Vue.js, 前端组件,进度条设计,组件化开发,Vue 自定义指令,响应式设计,Web 开发



资源地址:

https://pan.quark.cn/s/35324205c62b


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue 项目中自定义进度条的实现方法与技巧
在前端开发中,进度条是一种常见的用户界面元素,用于展示任务的完成情况或者指示加载过程。然而,有时候标准的进度条并不能完全满足我们的需求,因此,我们可能需要创建自定义的进度条来实现特定的效果或功能。
小焱
2025/06/06
1830
Vue 项目中自定义进度条的实现方法与技巧
在鸿蒙开发中实现自定义进度条
前些天发现一个问题,鸿蒙官方的进度条组件Progress虽然提供了比较丰富的功能,但是有时候还是不能满足开发的需要。
幽蓝计划
2025/06/19
620
VUE 自定义进度条组件
平常使用的框架中都是单一的进度,不能设置多个进度,这里就自定义一个支持多进度的进度条
码客说
2022/04/14
9560
VUE 自定义进度条组件
CSS进度条式Loading,加载到100%我们的距离就近了
改变伪类:before的宽度,即可形成动画,同时让动画停留在最后一帧上面animation-fill-mode: forwards;(这里直接简写,到animation后)
Javanx
2020/01/14
3.4K0
CSS进度条式Loading,加载到100%我们的距离就近了
你不知道的 CSS 进度条
作为一个这么常见的需求, whatwg 肯定是不会没有原生组件提供(虽然有我们也不一定会用),那么就让我们来康康有哪些有意思的进度条实现方式。
陈大鱼头
2020/12/18
6970
你不知道的 CSS 进度条
封装一个开关组件
前言 在我们日常项目开发中,我们经常会做一些功能的开关控制,所以封装了这款开关组件。 开关组件 属性 1. value 是否打开 值为布尔类型 默认为:false 2. disabled 是否不可用 值为布尔类型 默认为:false 3. showText 是否显示字,“开”或者“关” 值为布尔类型 默认为:true 事件 1. change 值改变事件 参数:value 是否打开(值为布尔类型) 示例 template: <div class="switch-list"> <div class
玖柒的小窝
2021/10/19
6320
微信小程序自定义组件-环形进度条
微信小程序自定义组件官方教程 环形进度条的组件已经放在github上 环形进度条效果图 创建步骤 1、在根目录创建名为components的文件夹,用来放需要引用的自定义组件。 2、创建名为canvas-ring的文件夹,用来放环形进度条自定义组件。 3、鼠标指着canvas-ring的文件夹 鼠标右键 “新建 Component” 取名canvas-ring。 结构图: 环形进度条组件的代码 canvas-ring.json { "component": true, //这一定要写成tr
别盯着我的名字看
2022/06/09
1.5K0
微信小程序自定义组件-环形进度条
为 Vue 的惰性加载加一个进度条
通常用 Vue.js 编写单页应用(SPA)时,当加载页面时,所有必需的资源(如 JavaScript 和 CSS 文件)都会被一起加载。在处理大文件时,这可能会导致用户体验不佳。
疯狂的技术宅
2020/10/22
3.4K0
为 Vue 的惰性加载加一个进度条
自定义vue.js全局组件库(仿MintUI)
在项目开发中,我们总会引入很多别人封装好的组件模板,使用时仅仅三步,第一步就是install,第二步在main.js里面引入,第三步Vue.use这个组件。例如MintUI,试想我们是否可以自己仿照MintUI写一个自己的组件同样让别人使用,设置成全局组件呢?下面就依照MintUI编写自己的组件库。
honey缘木鱼
2019/02/20
1.6K0
参考Bootstrap写的一个带百分比的进度条(附源码)
声明:本文由w3h5原创,转载请注明出处:《参考Bootstrap写的一个带百分比的进度条(附源码)》 https://www.w3h5.com/post/298.html
德顺
2019/11/13
2.5K0
参考Bootstrap写的一个带百分比的进度条(附源码)
安卓开发-车机应用实现自定义进度条UI
在车机应用开发中,进度条是一种常见的UI元素,用于显示任务进度或状态,如电池电量、下载进度等。
Nimyears
2024/09/04
2800
一篇文章教会你使用JS+CSS实现一个简单加载进度条的效果
我们经常在网页上 ,游戏界面加载时会看到加载进度条的效果,我们往往会以为这些加载进度条的效果,很难实现。
前端进阶者
2021/05/17
2.5K0
一篇文章教会你使用JS+CSS实现一个简单加载进度条的效果
CSS波浪进度条
当我们浏览网页时,我们经常会被各种各样的动画和效果所吸引。今天,让我们一起来揭开一个神奇的面纱,学习如何创建一个令人印象深刻的波浪进度条效果 🌊,而无需任何编程经验!
命运之光
2024/03/20
2530
CSS波浪进度条
《精通react/vue组件设计》之快速实现一个可定制的进度条组件
这篇文章是笔者写组件设计的第四篇文章,之所以会写组件设计相关的文章,是因为作为一名前端优秀的前端工程师,面对各种繁琐而重复的工作,我们不应该按部就班的去"辛勤劳动",而是要根据已有前端的开发经验,总结出一套自己的高效开发的方法.作为数据驱动的领导者react/vue等MVVM框架的出现,帮我们减少了工作中大量的冗余代码, 一切皆组件的思想深得人心.所以, 为了让工程师们有更多的时间去考虑业务和产品迭代,我们不得不掌握高质量组件设计的思路和方法.所以笔者将花时间去总结各种业务场景下的组件的设计思路和方法,并用原生框架的语法去实现各种常用组件的开发,希望等让前端新手或者有一定工作经验的朋友能有所收获.
徐小夕
2020/02/19
1.2K0
N 种仅仅使用 HTML/CSS 实现各类进度条的方式
本文将介绍如何使用 HTML/CSS 创建各种基础进度条及花式进度条及其动画的方式,通过本文,你可能可以学会:
Sb_Coco
2021/11/08
2.7K0
纯CSS3彩色进度条动画开发源码
这是一款css3彩色进度条动画特效。该CSS3进度条动画特效中包含了三种动画特效,它们通过HMTL代码和简单的CSS3来实现彩色进度条的不同动画效果。
用户5997198
2019/09/25
7360
纯CSS3彩色进度条动画开发源码
我优化了进度条,页面性能竟提高了70%
大家好,我是零一。最近我准备在组里进行代码串讲,所以我梳理了下项目之前的业务代码。在梳理的过程中,我看到了有个进度条组件写的非常好,这又想起我刚开始学前端时写的进度条的代码,跟这个比起来真的差距太大了(大部分的初学者应该都想不到,而且我第一次家实习公司带我的mentor亦是如此)。
@零一
2021/06/24
8570
Js 百分比进度条
      进入不下载,点击下载开始下载,暂停则暂停,原理控制setInterval和cleanInterval
思索
2024/08/16
4910
Typescript 入门写一个 react 进度条组件
TypeScript 入门,写一个 react 进度条组件 写在最前面 如果你写过 react 的组件, 这篇文章对与你来说基本没有什么难度。纯粹的是加上了一点 ts 的知识。 我完全是以学习者的姿态
西南_张家辉
2021/02/02
2K0
Android实现自定义进度条(源码+解析)
Android实现自定义进度条 .xml文件 属性介绍 .java文件 效果图 ZzHorizontalProgressBar .xml文件 属性介绍 style:进度条的样式 style="?and
是阿超
2022/08/07
6260
Android实现自定义进度条(源码+解析)
相关推荐
Vue 项目中自定义进度条的实现方法与技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验