uni-app怎么实现进度条 uni-app加载进度环形图制作【实战】

阿杰君_6247

阿杰君_6247

2026-03-24

1043人浏览

原创

uni-app无内置环形进度条,需用插件或svg实现;svg方案核心是通过stroke-dasharray与stroke-dashoffset计算圆弧进度,注意起点旋转、平台兼容性及事件交互处理。

uni-app怎么实现进度条 uni-app加载进度环形图制作【实战】

uni-app里没有内置环形进度条组件

uni-app 的 uni-ui 库只提供线性进度条 <uni-progress></uni-progress>,不支持环形(如 360° 圆弧、仪表盘风格)。强行用 CSS 画圆弧 + transform 做动画,容易在 iOS WebView 或小程序端失真、卡顿,尤其在低配安卓机上旋转角度计算错位,表现为进度“跳变”或“不动”。

实操建议:

  • 优先用官方推荐的 uni-app 插件市场方案:搜索「环形进度条」,安装高星插件如 uni-rate-circleuni-progress-circle(注意看 GitHub 更新时间和小程序兼容说明)
  • 若需完全可控,自己封装 SVG 版本:用 <svg></svg> + <circle></circle> + stroke-dasharray 计算路径长度,通过 stroke-dashoffset 控制进度,比 CSS transform 更稳定
  • 避免用 canvas 动态绘制:小程序 Canvas 在 v-for 列表中复用时易内存泄漏,且 uni-app 的 canvasToTempFilePath 在 H5 端不触发回调

uni-app 中 SVG 环形进度条的关键参数怎么算

核心是把百分比进度转成 SVG 圆弧的 stroke-dashoffset。假设圆半径 r = 45,描边宽度 stroke-width = 8,那么圆周长 = 2 * Math.PI * r ≈ 282.74,这就是最大 stroke-dasharray 值。

示例代码逻辑(放在组件 data 或 computed 中):

computed: {
  circleStyle() {
    const r = 45
    const circumference = 2 * Math.PI * r
    const progress = this.percent // 0-100
    const offset = circumference - (progress / 100) * circumference
    return {
      strokeDasharray: `${circumference} ${circumference}`,
      strokeDashoffset: offset,
      transition: 'stroke-dashoffset 0.3s ease'
    }
  }
}

注意点:

  • stroke-dasharray 设为 "总长 总长" 是为了确保虚线模式能完整覆盖整圈,否则会出现“断弧”
  • 务必在 <circle></circle> 上设置 transform="rotate(-90 50 50)",让 0° 起点在顶部(否则默认从 3 点钟方向开始)
  • 小程序真机调试时,style 绑定对象里的 transition 可能失效,建议改用 class + CSS 动画控制

uni-app 各端环形进度条表现不一致的典型错误

最常踩的坑是 H5 正常、微信小程序白屏、App 端进度卡在 0% —— 这通常不是代码问题,而是平台渲染机制差异导致。

常见现象与对策:

  • 微信小程序中 <svg></svg> 子元素(如 <circle></circle>)的 style 绑定不生效:改用 class + 动态 class 名,例如 :class="'progress-' + Math.round(percent)",CSS 里写好所有 0–100 的偏移值
  • H5 端圆弧边缘锯齿明显:给 <svg></svg>shape-rendering="geometricPrecision",并确保父容器宽高是偶数像素
  • App 端(尤其是 iOS)transform: rotate() 动画卡顿:禁用硬件加速(删掉 -webkit-transform: translateZ(0)),改用 animation-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1) 模拟缓动
  • 进度更新后视图不刷新:检查 percent 是否为响应式数据(不能是 const 或函数返回值),且赋值时用 this.percent = newValue,而非直接修改对象属性

uni-app 里怎么让环形进度条支持点击/拖拽交互

原生 SVG 不支持 @click 事件冒泡到 <circle></circle>,必须加一层透明遮罩或用 <view></view> 包裹整个 SVG 并监听 touch 事件。

实操要点:

  • 不要给 <circle></circle> 直接绑 @touchstart:小程序中无效,H5 中可能触发多次
  • <view class="progress-wrapper"></view> 包住 SVG,设 position: relative;内部加一个 <view class="mask"></view> 覆盖全区域,opacity: 0 + pointer-events: auto
  • 拖拽计算角度时,用 Math.atan2(dy, dx) 而非 Math.atan(),避免象限判断错误;再映射到 0–360° 后转为 0–100% 进度
  • 微信小程序中 touchmove 频率受限(约 30fps),建议加防抖:仅当角度变化 > 2° 时才更新 percent

环形进度条真正的难点不在画圆,而在各端对 SVG 属性、CSS 动画、事件绑定的支持程度不一。同一个 stroke-dashoffset 表达式,在 H5 是流畅动画,在小程序里可能得拆成 20 个预设 class 才稳。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2023

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4323

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5430

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

4878

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

683

5

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

2026.09.21

0

20

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

2026.09.21

0

24

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

2026.09.21

0

20

NumPy广播机制数学运算与统计分析
NumPy广播机制数学运算与统计分析

本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

2026.09.21

0

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.1万人学习