首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 初步介绍微信小程序
02 | 还有哪些其它公司的小程序产品
03 | 小程序的特点及开发能力
04 | 新的一年,微信小程序开放了哪些新功能?
05 | 小程序运行机制简介:从零构建一个Web App需要做哪些事情?
06 | 开发环境配置:创建你的第一个小程序项目
07 | icon组件:关于图标的4个实现方案
08 | progress组件:如何自定义实现一个环形进度条?
09 | rich-text组件:如何单击预览rich-text中的图片并保存?
10 | view容器组件及Flex布局(一):学习容器组件view及其重要属性
11 | view容器组件及Flex布局(二):介绍flex布局中常用的样式及样式值
12 | 可移动容器及可移动区域(一):学习使用movable-view与movable-area组件
13 | 可移动容器及可移动区域(二):如何实现侧滑删除功能
14 | scroll-view介绍:在小程序中如何实现滚动锚定?
15 | scroll-view介绍:如果渲染一个滚动的长列表?
16 | 滚动选择器(一):学习使用选择器组件
17 | 滚动选择器(二):使用两种方式自定义实现省、市、区三级联动的选择器
18 | 滑动选择器表单组件:如何基于wxs自定义一个竖向的slider?
19 | 页面链接组件:如何自定义一个导航栏?
20 | image媒体组件(上):如何实现图片的懒加载?
21 | image媒体组件(下):开发中经常遇到的问题?
22 | 如何实现直播间功能?(一):了解live-pusher、live-player组件的主要属性及使用限制
23 | 如何实现直播间功能?(二):如何开启、使用腾讯云的云直播功能
24 | 如何实现直播间功能?(三):安装与使用ffmepg,及使用ffmpeg进行推拉流验证
25 | 如何实现直播间功能?(四):使用live-pusher、live-player组件在小程序中实现直播功能
26 | 如何实现直播间功能?(五):同层渲染
27 | 如何实现直播间功能?(六):live-pusher、live-player组件在开发中的常见问题
28 | web-view(一):了解session、cookie等相关基本概念
29 | web-view(二):了解常见的四种鉴权方式
30 | web-view(三):如何使用koa框架,及如何进行热加载?
31 | web-view(四):如何在服务器端实现cookie与sesson的生成?
32 | web-view(五):如何将session存储到服务器端,及如何实现token验证?
33 | web-view(六):基于koa中间件,实现微信一键登录的后端接口
34 | web-view(七):实现微信用户一键登录
35 | web-view(八):了解正确的微信登录姿势
36 | web-view(九):web-view组件在开发的常见问题讲解
37 | WebGL介绍(一):了解WebGL相关的基础概念
38 | WebGL介绍(二):如何在小程序中取到WebGL上下文环境对象
39 | WebGL介绍(三):了解WebGL的世界坐标系
40 | WebGL介绍(四):重新认识右手坐标系及如何编写顶点着色器代码
41 | WebGL介绍(五):学习片断着色器编写,了解变量修饰变型uniform与attribute
42 | WebGL介绍(六):了解在WebGL中裁剪空间是如何裁剪出来的
43 | WebGL介绍(七):了解着色器变量值的绑定及三种三角形绘制模式之间的差异
44 | WebGL介绍(八):在着色器中使用共享变量,绘制一个颜色渐变的正方形
45 | WebGL介绍(九):完成动画
46 | WebGL介绍(十):绘制一个旋转的立方体
47 | WebGL介绍(十一):在3D绘制中使用纹理材质
48 | WebGL介绍(十二):如何创建相机、场景及光源
49 | WebGL介绍(十三):创建加载器、渲染器与控制器,完成3D模型文件的加载与展示
50 | 网络接口简介(一):如何使用wx.request接口
51 | 网络接口简介(二):将登录代码模块化封装
52 | 网络接口简介(三):Promise介绍及 6 个常用方法
53 | 网络接口简介(四):Promise三个方法any、all与race的使用介绍
54 | 网络接口简介(五):基于Promise+await、async关键字改写登录模块
55 | 网络接口简介(六):关于Page页面隐藏代码执行及Promise对象的catch处理的补充
56 | 网络接口简介(七):学习EventChannel对象
57 | 网络接口简介(八):观察者模式介绍及Event模块实现
58 | 网络接口简介(九):扩展wxp模块的request3方法,实现用户登录的自动融合
59 | tabBar组件(一):系统默认的tabBar组件如何开启及使用
60 | tabBar组件(二):基于系统提供的自定义方式,实现一个tabBar组件
61 | tabBar组件(三):通过自定义组件扩展的方式,给任意组件添加通用方法
62 | 开放接口(一):如何对Page进行全局扩展
63 | 开放接口(二):优化前后端登录代码,解决后端解密错误
当前位置:
首页>>
技术小册>>
微信小程序全栈开发实战(上)
小册名称:微信小程序全栈开发实战(上)
### 08 | Progress组件:如何自定义实现一个环形进度条 在微信小程序开发中,`progress` 组件提供了一种快速实现线性进度条的方式,但有时候,为了满足更丰富的UI设计需求,如环形进度条(也称为圆形进度条或加载指示器),我们需要手动实现这样的组件。环形进度条因其直观、美观的特点,在加载提示、任务进度显示等场景中尤为常见。本章节将详细讲解如何在微信小程序中自定义实现一个环形进度条,包括基础布局、动画实现、以及如何通过CSS和JavaScript控制进度。 #### 一、环形进度条的基础概念 环形进度条主要由以下几个部分组成: 1. **容器**:通常是一个圆形(或椭圆形)的容器,用于定义进度条的整体外观和尺寸。 2. **进度部分**:根据进度百分比动态变化的圆形区域,通常通过调整其颜色、宽度或透明度来区分已完成的进度和未完成的进度。 3. **可选元素**:如文字标签,用于显示当前进度百分比或其他相关信息。 #### 二、HTML与CSS布局 在微信小程序中,我们使用WXML和WXSS(类似于HTML和CSS)来构建界面。首先,我们需要创建一个圆形的容器,并在其内部通过另一个元素来表示进度。 **WXML结构示例**: ```xml <view class="progress-circle-container"> <view class="progress-circle" style="transform: rotate({{rotateDeg}}deg) translateX(-50%) translateY(-50%);"></view> <text class="progress-text">{{progressPercent}}%</text> </view> ``` **WXSS样式设置**: ```css .progress-circle-container { position: relative; width: 100px; /* 容器宽度 */ height: 100px; /* 容器高度 */ border-radius: 50%; /* 设置为圆形 */ overflow: hidden; /* 隐藏超出部分 */ display: flex; justify-content: center; align-items: center; } .progress-circle { position: absolute; width: 100%; height: 100%; border-radius: 50%; clip: rect(0, 50px, 100px, 0); /* 初始裁剪,用于实现半圆效果 */ background-color: #409EFF; /* 进度条颜色 */ } .progress-text { position: absolute; font-size: 16px; color: #333; width: 100%; text-align: center; } ``` 注意:上述CSS中的`clip`属性用于创建半圆效果,但`clip`属性在较新的CSS版本中已被废弃,建议使用`clip-path`替代,但考虑到微信小程序的兼容性,这里使用了一种简化的方法。 #### 三、动态进度实现 要实现环形进度条的动态效果,我们需要根据进度值动态调整`progress-circle`的样式。这里的关键是改变其`transform`属性中的`rotate`值,以及可能的`clip-path`(如果使用现代CSS特性)或通过覆盖层来实现更复杂的进度效果。 **JavaScript逻辑**: ```javascript Page({ data: { progressPercent: 0, // 进度百分比 rotateDeg: -90, // 初始旋转角度 }, onLoad: function() { this.startProgress(); }, startProgress: function() { let progress = 0; const interval = setInterval(() => { progress += 10; // 每次增加10% if (progress > 100) { clearInterval(interval); progress = 100; } this.setData({ progressPercent: progress, rotateDeg: progress * 3.6 - 90 // 计算旋转角度,根据圆形周长换算 }); }, 1000); } }); ``` 在上述代码中,我们通过`setInterval`模拟了进度条的增长过程,并根据进度值计算了需要旋转的角度。这里使用了简单的线性增长模型,实际应用中可以根据需要调整增长逻辑,如非线性增长、根据特定事件触发等。 #### 四、优化与进阶 1. **性能优化**:在更新UI时,尽量减少不必要的重绘和重排,可以通过CSS3的`transform`和`opacity`属性来实现,因为这些属性不会引起回流(reflow)。 2. **动画效果**:可以使用CSS动画(如`@keyframes`)来平滑过渡进度条的变化,增强用户体验。 3. **自定义样式**:环形进度条的颜色、宽度、边框等都可以根据设计需求进行调整,以实现更加丰富的视觉效果。 4. **响应式设计**:考虑在不同屏幕尺寸和设备上保持进度条的良好显示效果,可能需要使用媒体查询(Media Queries)或微信小程序提供的响应式布局工具。 5. **动态数据绑定**:在实际项目中,进度条的数据往往来源于后端或用户操作,可以通过微信小程序的数据绑定机制,实现进度条的动态更新。 6. **SVG或Canvas实现**:对于更复杂的图形和动画效果,可以考虑使用SVG或Canvas来绘制环形进度条,这提供了更高的灵活性和控制力。 #### 五、总结 自定义实现一个环形进度条在微信小程序中虽然需要一定的HTML/CSS/JavaScript知识,但通过合理的布局和动画设计,可以创造出既美观又实用的进度显示组件。本章节从基础概念出发,逐步讲解了环形进度条的实现过程,并提供了优化和进阶的建议,希望能对读者在开发过程中有所帮助。
上一篇:
07 | icon组件:关于图标的4个实现方案
下一篇:
09 | rich-text组件:如何单击预览rich-text中的图片并保存?
该分类下的相关小册推荐:
微信小程序全栈开发实战(下)
微信小程序与云开发(上)
微信小程序全栈开发实战(中)
微信小程序与云开发(下)
微信小程序底层框架实现原理
微信小程序与云开发(中)