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

使用 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.pswp.cn/pingmian/82820.shtml

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

相关文章

Python爬虫实战:研究Beautiful Soup框架相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何从海量的网页数据中高效提取有价值的信息,成为信息科学领域的重要研究课题。网络爬虫作为一种自动获取网页内容的技术,能够按照预设规则遍历互联网并采集数据,为信息检索、舆情分析、商…

【Tips】关于PCI和PCIe的配置空间差异和io/memory io读写

最近在看同事2023年讲的PCI基础课&#xff0c;感觉确实是豁然开朗了&#xff0c;赞美同事。 PCIe实际上是PCI的扩展&#xff08;extended&#xff09;&#xff0c;PCIe设备相当于是迭代升级产品。 而PCIe的配置空间基于PCI原有的0xFF&#xff08;256字节&#xff09;配置空间…

桂花网体育运动监测方案:开启幼儿园运动健康管理新篇章

在幼儿教育领域&#xff0c;运动能力的培养与健康监测始终是备受关注的核心环节。随着科技的飞速发展&#xff0c;如何科学、有效地监测幼儿的运动状态&#xff0c;成为了幼儿园教育者面临的一大挑战。桂花网体育运动监测方案凭借其高效、精准、智能化的特性&#xff0c;为幼儿…

Perforce P4产品简介:无限扩展+全球协作+安全管控+工具集成(附下载)

本产品简介由Perforce中国授权合作伙伴——龙智编辑整理&#xff0c;旨在带您快速了解Perforce P4版本控制系统的强大之处。 世界级无限可扩展的版本控制系统 Perforce P4&#xff08;原Helix Core&#xff09;是业界领先的版本控制平台&#xff0c;备受19家全球Top20 AAA级游…

pikachu靶场通关笔记08 XSS关卡04-DOM型XSS

目录 一、XSS原理 二、DOM型XSS 三、源码分析 1、进入靶场 2、XSS探测 3、源码分析 四、渗透实战 1、Payload1 2、Payload2 3、Payload3 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关&#xff09;渗透集合&#xff0c;通过对XSS关卡源码的代码审计找到XSS风…

安全访问 std::tuple 的容错方法及气象领域应用

安全访问 std::tuple 的容错方法及气象领域应用 1. std::tuple 安全访问的核心问题 1.1 元组结构性问题&#xff08;编译时错误&#xff09; 当元组元素数量为空时&#xff08;std::tuple<>&#xff09;&#xff0c;任何访问元素的尝试都会导致编译错误​&#xff1a;…

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…

【大模型学习网络互联】Memory-Mapped I/O MMIO语义与MEM语义

MMIO语义和MEM语义的区别 嗯&#xff0c;用户要求更详细地区分MMIO和MEM语义&#xff0c;看来之前的中文对比虽然系统但还不够深入。用户可能是嵌入式开发者或OS内核学习者&#xff0c;需要从硬件行为层面理解差异。 用户连续追问MMIO相关概念&#xff0c;说明ta在接触底层开发…

如何在使用kickstart安装物理机操作系统的过程中核对服务器的SN

原因 在使用kickstart对物理机进行重装的时候&#xff0c;由于自动化配置&#xff0c;挂载镜像重启之后就会自动化开始安装部署&#xff0c;不够安全&#xff0c;万一选错服务器没有办法回退。因此可以在kickstart的ks配置文件中新增服务器SN的校验&#xff0c;当校验不通过的…

spring4第4课-ioc控制反转-详解如何注入参数

坚持住&#xff0c;第四天&#xff0c;继续学习spring4.详解如何注入参数 先总结&#xff0c;主要有如下6种&#xff1a; 1&#xff0c;基本类型值&#xff1b; 2&#xff0c;注入 bean&#xff1b; 3&#xff0c;内部 bean&#xff1b; 4&#xff0c;null 值&#xff1b; 5&…

cf2067A

原题链接&#xff1a;https://codeforces.com/contest/2067/problem/A 题目背景&#xff1a; 给定x,y&#xff0c;判读是否存在 n 满足S(n) x&#xff0c;S(n 1) y。定义 S(a) 等于 a 的十进制位数之和。 思路&#xff1a; 不难发现一般 n 和 n 1 的位数之和相差为 1&…

微信小程序获取手机号

详细代码 <t-button size"large" theme"primary" variant"outline" data-type"hasCancelBtn" bind:tap"showDialog" block style"display: none;">开放能力按钮 </t-button> <t-dialog id"t-…

AI重构SEO关键词精准定位

内容概要 随着AI技术深度渗透数字营销领域&#xff0c;传统SEO关键词定位模式正经历系统性重构。基于自然语言处理&#xff08;NLP&#xff09;的智能语义分析引擎&#xff0c;可突破传统关键词工具的局限性&#xff0c;通过解析长尾搜索词中的隐含意图与语境关联&#xff0c;…

四足机器人环境监测系统相关问题

一、在设计四足机器人监测与跟踪系统整体架构时&#xff0c;你主要考虑了哪些因素&#xff1f;为什么这样设计以确保系统的高效性与稳定性&#xff1f; 在设计四足机器人监测与跟踪系统整体架构时&#xff0c;主要考虑了传感器兼容性与通信效率、多任务并发处理能力、实时数据…

uniapp 开发安卓app 微信授权获取昵称 头像登录

在manifest.json中配置appid 以及appsecret uni.login({provider: weixin,success: function (loginRes) {console.log(loginRes.authResult);// 获取用户信息uni.getUserInfo({provider: weixin,success: function (infoRes) {console.log(用户昵称为&#xff1a; infoRes.u…

MySQL8.4组复制

https://dev.mysql.com/doc/refman/8.4/en/group-replication.html 1 什么是组复制 组复制主要解决了传统异步复制主机宕机时可能造成主从节点数据不一致问题MySQL Group Replication&#xff0c;简称MGR将原有的gtid复制功能进行可增强&#xff0c;支持单主模式和多主模式组复…

Python后端开发实战:从0到1搭建高可用API服务

引言 Python凭借其简洁的语法和丰富的生态(如Django、Flask、FastAPI等框架),已成为后端开发的主流语言之一。本文将结合一个真实电商API项目,分享从架构设计到部署上线的完整流程,并总结开发过程中常见的坑与最佳实践。 一、实战案例:电商API开发流程 1.1 技术选型 框…

本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt

项目视频讲解: 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt_哔哩哔哩_bilibili 运行结果:

aws instance store 的恢复

1: aws instance store 要在launch instance 才可以创建,而且,通过snapshot 恢复后,instance store 里面的数据会丢失。 下面是创建instance store 的过程,和通过两种方式恢复,发现/etc/fstab 不同的写法,有的不能启动: [root@ip-xx ~]# lsblk NAME MAJ:MIN RM …

React 生命周期与 Hook 理解解析

从生命周期到 Hook&#xff1a;React 组件演进之路 React 组件的本质是管理渲染与副作用的统一体。Class 组件通过生命周期方法实现这一目标&#xff0c;而函数组件则依靠 Hook 系统达成相同效果。 Class 组件生命周期详解 生命周期完整流程 Class 组件生命周期可分为三大阶…