鸿蒙OSUniApp 制作自定义的进度条组件#三方框架 #Uniapp

news2025/6/1 6:27:10

使用 UniApp 制作自定义的进度条组件

在移动应用开发中,进度条是非常常见的 UI 组件,无论是文件上传、下载、任务进度还是表单填写反馈,进度条都能为用户提供直观的进度提示。虽然 UniApp 提供了一些基础的进度条能力,但在实际项目中,我们往往需要更灵活、更美观的自定义进度条。本文将详细介绍如何在 UniApp 中手写一个可复用、可定制的进度条组件,并结合实际案例进行讲解。

为什么要自定义进度条?

虽然 UniApp 的 uni-progress 组件可以满足基础需求,但在以下场景下自定义进度条更有优势:

  • 需要特殊的样式(如渐变色、圆角、动画等);
  • 需要在进度条上显示自定义内容(如百分比、图标、状态文字等);
  • 需要支持多种主题或适配不同的产品风格;
  • 需要更复杂的交互(如点击、拖拽调整进度等)。

自定义进度条不仅能提升产品的视觉体验,还能增强用户的操作感知。

组件设计思路

在设计自定义进度条组件时,我们需要考虑以下几点:

  1. 可配置性:支持自定义颜色、高度、圆角、动画、显示内容等;
  2. 响应式:进度变化时能平滑过渡,适配不同屏幕尺寸;
  3. 易用性:对外暴露简单明了的 props,方便父组件传参;
  4. 可扩展性:后续可以方便地增加新功能,如分段进度、状态切换等。

组件实现

我们以一个横向进度条为例,支持自定义颜色、进度、显示百分比、圆角和动画。

1. 组件结构

components/progress-bar/progress-bar.vue 下新建组件:

<template>
  <view class="progress-bar-container" :style="containerStyle">
    <view class="progress-bar-bg" :style="bgStyle">
      <view class="progress-bar-inner" :style="innerStyle">
        <text v-if="showText" class="progress-bar-text">{{ displayText }}</text>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  name: 'ProgressBar',
  props: {
    percent: {
      type: Number,
      default: 0
    },
    height: {
      type: String,
      default: '16px'
    },
    bgColor: {
      type: String,
      default: '#f5f5f5'
    },
    barColor: {
      type: String,
      default: 'linear-gradient(90deg, #4facfe 0%, #00f2fe 100%)'
    },
    borderRadius: {
      type: String,
      default: '8px'
    },
    showText: {
      type: Boolean,
      default: true
    },
    textColor: {
      type: String,
      default: '#333'
    },
    textInside: {
      type: Boolean,
      default: true
    },
    animation: {
      type: Boolean,
      default: true
    }
  },
  computed: {
    containerStyle() {
      return {
        width: '100%',
        height: this.height
      };
    },
    bgStyle() {
      return {
        width: '100%',
        height: '100%',
        background: this.bgColor,
        borderRadius: this.borderRadius,
        overflow: 'hidden',
        position: 'relative'
      };
    },
    innerStyle() {
      return {
        width: `${Math.min(this.percent, 100)}%`,
        height: '100%',
        background: this.barColor,
        borderRadius: this.borderRadius,
        display: 'flex',
        alignItems: 'center',
        justifyContent: this.textInside ? 'center' : 'flex-end',
        color: this.textColor,
        transition: this.animation ? 'width 0.5s cubic-bezier(0.4,0,0.2,1)' : 'none',
        position: 'relative'
      };
    },
    displayText() {
      return `${Math.round(this.percent)}%`;
    }
  }
};
</script>

<style scoped>
.progress-bar-container {
  width: 100%;
}
.progress-bar-bg {
  width: 100%;
  background: #f5f5f5;
  position: relative;
}
.progress-bar-inner {
  min-width: 24px;
  box-sizing: border-box;
  font-size: 14px;
  white-space: nowrap;
  transition: width 0.5s cubic-bezier(0.4,0,0.2,1);
}
.progress-bar-text {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  font-size: 14px;
  color: inherit;
}
</style>

2. 组件使用示例

在页面中引用并使用自定义进度条组件:

<template>
  <view class="demo-progress">
    <progress-bar :percent="progress" barColor="#42d392" height="20px" />
    <progress-bar :percent="progress" barColor="linear-gradient(90deg, #ff5858 0%, #f09819 100%)" height="18px" :showText="true" />
    <progress-bar :percent="progress" barColor="#007aff" :showText="false" height="12px" />
    <button @click="increase">增加进度</button>
  </view>
</template>

<script>
import ProgressBar from '@/components/progress-bar/progress-bar.vue';

export default {
  components: { ProgressBar },
  data() {
    return {
      progress: 30
    };
  },
  methods: {
    increase() {
      this.progress = Math.min(this.progress + 10, 100);
    }
  }
};
</script>

<style>
.demo-progress {
  padding: 32rpx;
}
button {
  margin-top: 24rpx;
}
</style>

3. 效果展示与扩展

上面的例子中,我们实现了不同颜色、不同高度、是否显示文本的进度条。你可以根据实际需求进一步扩展:

  • 支持分段进度(如多步表单);
  • 支持自定义进度条末端图标;
  • 支持垂直方向进度条;
  • 支持点击或拖拽调整进度(如音量条、进度条拖动)。

总结与思考

自定义进度条组件不仅能提升产品的美观度和交互体验,还能帮助开发者深入理解 UniApp 组件化开发的思想。通过合理的 props 设计和样式封装,我们可以让组件既灵活又易用。

在实际开发中,建议多参考优秀的 UI 框架(如 Element、Ant Design 等)对进度条的设计思路,结合自身项目需求进行创新和优化。希望本文能为你在 UniApp 项目中实现自定义进度条提供实用的参考。


如有疑问或更好的实现思路,欢迎在评论区交流分享!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2392207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python办公】Excel简易透视办公小工具

目录 专栏导读1. 背景介绍2. 功能介绍3. 库的安装4. 界面展示5. 使用方法6. 实际应用场景7. 优化方向完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系…

Linux系列-2 Shell常用命令收集

背景 本文用于收集Linux常用命令(基于Centos7)&#xff0c;是一个持续更新的博客&#xff0c;建议收藏&#xff0c;编写shell时遇到问题可以随时查阅。 1.Shell类型 shell是用C语言编写的程序&#xff0c;作为命令解释器连接着用户和操作系统内核。常见的shell有sh(Bourne She…

MATLAB使用多个扇形颜色变化表示空间一个点的多种数值

MATLAB使用多个扇形颜色变化表示空间一个点的多种数值 excel中表格中数据格式&#xff0c;多行 lonlatdata1data2data3117380.11100 clear;close all; figure(Position,[100 100 800 800]);num_points 14; [num,txt,raw] xlsread(test.xlsx); x num(:,1); y num(:,2);d…

CAD精简多段线顶点、优化、删除多余、重复顶点——CAD c#二次开发

附部分代码如下: public static void Pl精简(){Document doc Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database db doc.Database;Editor ed doc.Editor;var plOrigon db.SelectCurve("\n选择多段线&#xff1a;");…

输电线路的“智慧之眼”:全天候可视化监测如何赋能电网安全运维

在电力需求持续攀升、电网规模日益庞大的今天&#xff0c;输电线路的安全稳定运行面临着前所未有的挑战。线路跨越地形复杂多变&#xff0c;尤其是在偏远山区、铁路沿线及恶劣天气条件下&#xff0c;传统的人工巡检方式显得力不从心——效率低、风险高、覆盖有限。如何实现更智…

两阶段法目标检测发展脉络

模式识别期末展示大作业&#xff0c;做个记录&#xff0c;希望大家喜欢。 R-CNN Fast R-CNN R-FCN 整个过程可以分解为以下几个步骤&#xff1a; 输入图像 (image) 和初步特征提取 (conv, feature maps)&#xff1a; 首先&#xff0c;输入一张原始图像&#xff0c;经过一系列…

小白的进阶之路系列之六----人工智能从初步到精通pytorch数据集与数据加载器

本文将介绍以下内容: 数据集与数据加载器 数据迁移 如何建立神经网络 数据集与数据加载器 处理数据样本的代码可能会变得混乱且难以维护;理想情况下,我们希望我们的数据集代码与模型训练代码解耦,以获得更好的可读性和模块化。PyTorch提供了两个数据原语:torch.utils…

NestJS——重构日志、数据库、配置

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

c++数据结构8——二叉树的性质

一、二叉树的基本性质 示图1&#xff1a; 性质1&#xff1a;层节点数上限 在一棵二叉树中&#xff0c;第i层至多有2^{i-1}个节点&#xff08;首层是第1层&#xff09; 这个性质可以通过数学归纳法证明&#xff1a; 第1层&#xff1a;2^{1-1}2^01个节点&#xff08;根节点&am…

Window Server 2019--08 网络负载均衡与Web Farm

本章要点 1、了解网络负载均衡技术 2、掌握Web Farm核心原理 3、掌握如何使用Windows NLB搭建Web Farm环境 网络负载均衡技术将外部计算机发送的连接请求均匀的分配到服务器集群中的每台服务器上&#xff0c;接受到请求的服务器独立地响应客户的请求。 网络负载均衡技术还…

SpringBoot:统一功能处理、拦截器、适配器模式

文章目录 拦截器什么是拦截器&#xff1f;为什么要使用拦截器&#xff1f;拦截器的使用拦截路径执行流程典型应用场景DispatcherServlet源码分析 适配器模式适配器模式定义适配器模式角色适配器模式的实现适配器模式应用场景 统⼀数据返回格式优点 统一处理异常总结 拦截器 什…

AI Agent工具全景解析:从Coze到RAGflow,探索智能体自动化未来!

在人工智能技术持续深入行业应用的背景下&#xff0c;越来越多的企业和个人寻求通过自动化技术来提高效率和减少重复性劳动&#xff0c;AI Agent的崛起已经成为了不可忽视的趋势。AI Agent&#xff0c;即人工智能代理&#xff0c;是一种基于先进的人工智能技术&#xff0c;特别…

Onvif协议:IPC客户端开发-IPC相机控制(c语言版)

前言&#xff1a; 本博文主要是借鉴OceanStar大神的博文&#xff0c;在他的博文的基础之上做了一部分修改与简化。 博文链接&#xff1a; Onvif协议&#xff1a;IPC客户端开发之鉴权_onvif鉴权方式-CSDN博客 Onvif协议&#xff1a;IPC客户端开发之PTZ控制_onvif ptz-CSDN博客…

如何最简单、通俗地理解Pytorch?神经网络中的“梯度”是怎么自动求出来的?PyTorch的动态计算图是如何实现即时执行的?

PyTorch是一门科学——现代深度学习工程中的一把锋利利器。它的简洁、优雅、强大,正在让越来越多的AI研究者、开发者深度应用。 1. PyTorch到底是什么?为什么它重要? PyTorch是一个开源的深度学习框架,由Facebook AI Research(FAIR)于2016年发布,它的名字由两个部分组成…

QT+opecv如何更改图片的拍摄路径

如何更改相机拍摄图片的路径 前言&#xff1a;基础夯实&#xff1a;效果展示&#xff1a;实现功能&#xff1a;遇到问题&#xff1a;未解决&#xff1a; 核心代码&#xff1a; 前言&#xff1a; 最近在项目开发中遇到需要让用户更改相机拍摄路径的问题&#xff0c;用户可自己选…

秋招Day11 - JVM - 类加载机制

了解类的加载机制吗&#xff1f; JVM是运行Java字节码&#xff0c;也就是运行.class文件的虚拟机&#xff0c;JVM把.class文件中描述类的数据结构加载到内存中&#xff0c;并对数据进行校验&#xff0c;解析和初始化&#xff0c;最终转化为JVM可以使用的类型&#xff08;Klass…

Webug4.0靶场通关笔记03- 第3关SQL注入之时间盲注(手注法+脚本法 两种方法)

目录 一、源码分析 1.分析闭合 2.分析输出 &#xff08;1&#xff09;查询成功 &#xff08;2&#xff09;查询失败 &#xff08;3&#xff09;SQL语句执行报错 二、第03关 延时注入 1.打开靶场 2.SQL手注 &#xff08;1&#xff09;盲注分析 &#xff08;2&#xf…

Vert.x学习笔记-什么是Handler

Vert.x学习笔记 在Vert.x中&#xff0c;Handler是一个核心概念&#xff0c;用于处理异步事件和回调。它是Vert.x响应式编程模型的核心组件之一&#xff0c;通过函数式接口的方式简化了异步编程的复杂性。 1. Handler的定义 Handler是一个函数式接口&#xff0c;定义如下&#…

【Echarts】象形图

目录 效果代码 效果 代码 <!-- 业务类型 --> <template><div class"ywlx" :style"{ --height: height }"><div class"header_count count_linear_bg"><div>当月业务总量<span class"common_count text_s…

集星云推短视频矩阵系统的定制化与私有化部署方案

在当今数字化营销时代&#xff0c;短视频矩阵系统成为众多企业和机构拓展影响力、实现精准营销的关键工具。集星云推短视频矩阵系统凭借其强大的功能和灵活的定制性&#xff0c;为企业提供了全方位的解决方案。 一、API接口定制&#xff1a;无缝对接自有系统 集星云推短视频矩…