基于canvas 2D实现微信小程序自定义组件-环形进度条

最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个环形进度条微信小程序自定义组件,文中有示例代码,写的比较粗陋,感兴趣的小伙伴们可以讨论交流

本文实例为大家分享了微信小程序实现环形进度条的具体代码,具体实现功能如下

  • 参考微信小程序自定义组件官方教程
  • 实现进度渐变
  • 实现颜色渐变

先上效果图(录制不清晰,凑合着看v)

开发步骤

1、在根目录创建名为components的文件夹,用来放需要引用的自定义组件。
2、创建名为circle的文件夹,用来放环形进度条自定义组件。
3、代码拷贝到对应目录下即可正常使用

目录结构图:

主要代码,代码比较简单,文中有相应的注释(完整项目,最后有下载地址)

circle.json

{"component": true,"usingComponents": {}
}

circle.wxml

<canvas   id="myCanvas_circle" ><view class="circle-bar" style="height:{{canvasWidth}}px;"><view class="title_name">{{title}}</view><view class="title_val" >{{value}} {{suffix}}</view></view>
</canvas>

circle.wxss

.circle-bar{width: 100%;display: flex;flex-direction: column;justify-content: center;align-items: center;text-align: center;position: absolute;top: 0;}.circle-bar .title_name{max-height: 62rpx;font-size: 26rpx;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;}

circle.js

_setPercent: function (per, old) {var ctx = this.data.ctx2d;if (!ctx) {return;}// 大小值的计算var circle_r = this.data.canvasWidth / 2; //画布的一半,用来找中心点和半径var startDegree = this.data.startDegree; //从什么角度开始var maxValue = this.data.maxValue; //最大值var minValue = this.data.minValue; //最小值var lineColor = this.data.lineColor; //线条颜色var lineWidth = this.data.lineWidth; //线条宽度var percent = 360 * ((this.data.value - minValue) / (maxValue - minValue)); //计算结果var direction = false; //默认顺时针//根据差值计算     if (per > old) {//绘制彩色        if (this.data.isColours) {//设置渐变色var my_gradient = ctx.createLinearGradient(0, 0, 200, 0);         my_gradient.addColorStop(0, this.data.lineColor);my_gradient.addColorStop(0.5, "red");my_gradient.addColorStop(1, "#FA6400");lineColor = my_gradient;}startDegree = 360 * ((old - minValue) / (maxValue - minValue));percent = 360 * (((per - old) - minValue) / (maxValue - minValue))} else {//绘制灰色,反向绘制lineColor = "#ebebeb";direction = true;startDegree = 360 * ((old - minValue) / (maxValue - minValue));percent = 360 * (((old - per) - minValue) / (maxValue - minValue))}//绘制有色彩的圆弧  var currtnt_st = 0; //绘制进度var step = 10;var span = 200 * step / (percent); //200ms完成绘制var drawInterval = setInterval(() => {currtnt_st = currtnt_st + step;if (currtnt_st > percent) {currtnt_st = percent;}ctx.beginPath();ctx.strokeStyle = lineColor;ctx.lineWidth = lineWidth;if (!direction) {ctx.arc(0, 0, circle_r - 10, startDegree * Math.PI / 180 - 0.5 * Math.PI, (startDegree + currtnt_st) * Math.PI / 180 - 0.5 * Math.PI, direction);} else {ctx.arc(0, 0, circle_r - 10, startDegree * Math.PI / 180 - 0.5 * Math.PI, ((startDegree - currtnt_st) * Math.PI / 180) - 0.5 * Math.PI, direction);}ctx.stroke();ctx.closePath();if (currtnt_st >= percent) {clearInterval(drawInterval);}}, span);}

使用组件

index.json

{"navigationBarTitleText": "测试页面","usingComponents": {"circle": "/components/circle/circle"}
}

index.wxml

<view class="circle-ps"><circle type="2d" id="can" canvasWidth="{{80}}" value="{{per}}" valueColor="#333" lineWidth="{{3}}"></circle></view><view class="circle-ps"><circle type="2d" name="cans1" canvasWidth="{{90}}" value="{{per1}}" valueColor="#333" lineWidth="{{3}}"></circle></view>

index.js

     setInterval(() => {this.setData({per:parseInt(Math.random()*100),per1:parseInt(Math.random()*100),})}, 1000);

组件的属性介绍

属性名称 类型 默认值 说明
画布宽度 float 100%*0.4 画布默认大小
线条宽度 float 10 环形线条粗细
线条颜色 string “#3696FA” 颜色代码
标题 string “完成率”
最大值 int 100
最小值 int 0
值后缀 string %
开始角度 int 0 开始绘制圆环的角度(0-360)
是否开启渐变 bool false 是否启用圆环进度颜色渐变

环形进度条的组件完整代码:
下载完整源码

基于canvas 2D实现微信小程序自定义组件-环形进度条相关推荐

  1. 微信小程序自定义封装环形进度条组件

    我们先看效果-选不了视频没办法了 说明:此组件对圆的宽度,进度条的宽度.颜色.旋转方向,还有进度条的值,还有两端是否要圆角都进行了动态化,无坑可放心用,参数解释在注释里,我就不写了 .效果图看到尾部的 ...

  2. 微信小程序自定义组件方案

    前言:小程序已于11月初开放了小程序组件功能,但事件方面还不是很完善,有的组件暂时可能还是要用其他方式来实现,这里简单记录下开发小程序自定义组件的要点. 在小程序官方开发组件开发功能之前,自定义组件的 ...

  3. 微信小程序自定义组件,提示组件

    微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加"components"目录,然后像添加Page ...

  4. 微信小程序自定义组件(二)

    微信小程序自定义组件 ps 由于作业部落貌似出了点问题,耽误了点时间,找了一个stackedit.io准备写.无奈,这是要自己建编辑器的节奏啊.没有一个能靠的注 为何存在组件 组件间的关系 使用rel ...

  5. 微信小程序--自定义组件(超详细 从新建到使用)

    微信小程序–自定义组件 微信小程序官网介绍! 本文提供给急需使用自定义组件人群,以下是博主个人理解和案例!可以辅助官网来看 介绍: 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程.所 ...

  6. 微信小程序自定义组件子传父详解(多图)

    微信小程序自定义组件子传父详解 前言: 刚开始为了测试父传子,所以把页面的数组放在了父组件中 1. 然而子组件中绑定的自定义点击事件依然放在子组件的js文件中 2. 所以就会出现我们点击页面的文字能改 ...

  7. 微信小程序自定义组件的基本使用

    微信小程序自定义组件的基本使用 组件与模块类似,实现了功能的复用,提高开发速率,减少代码量 在开发过程中 , 总会遇到一些功能板块是相同或很类似的 .如两个不同页面都有搜索框 , 或者 导航栏等 . ...

  8. 微信小程序自定义组件-树形数据表格(进阶版)

    前言 一.下载引用 二.使用treegrid组件 三.使用文档 属性 事件 四.组件源码 利用递归思想编写的表格行--treegrid-treeline 树形表格--treegrid-treegrid ...

  9. 小程序组件onload_微信小程序自定义组件(一)

    好吧,突然发现学不完了,一下子,那就分开吧,由于时间太久,直接重新大致复习了一下 微信小程序自定义组件 微信小程序支持自定义组件 下方的目录 其中,components为组件目录,nodemodule ...

最新文章

  1. 人机协同作战:或改写未来战争规则
  2. Linux下添加DB2用户
  3. Haproxy全透明代理
  4. 关于布线设计方案+网络产品的一个网站
  5. 网络传输 中文乱码问题
  6. 项目实战丨某高校校园网络升级改造方案
  7. STM32 CAN错误管理
  8. 044-PHP获得多个类对应的反射信息
  9. jdk8lambda_JDK8 lambda的会话指南–术语表
  10. NGUI中UILabel使用url标签的一个bug
  11. (C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作
  12. OpenBSD 5.1 正式版发布
  13. R con not resolved of types
  14. excel几个数相加等于某个数_[求助]如何能计算出几个数字相加等于一个给定的数...
  15. 怎样删除Weblogic Domain?
  16. [c语言编程入门]迭代法求平方根
  17. MongoDB系列四:解决secondary的读操作
  18. 基于单片机的模拟电磁曲炮设计
  19. 国产化图形引擎一词引发的感想!
  20. 从水处理速度梯度的公式,复习一下物理学常用公式,擦边爱因斯坦质能方程

热门文章

  1. 高通骁龙855强势上线:7nm工艺,性能较845提升至少3倍,全面支持5G
  2. SVN文件绿色图标显示方法
  3. HttpServletRequest
  4. webrtc 踩坑实录
  5. 抖音直播高光时刻是什么,能为主播商家带来多大好处丨国仁网络
  6. Js之offset属性与style属性的区别
  7. 运维经典面试真题汇总系列
  8. Java基础了解-12-网络编程/发送邮件/多线程编程/Applet 基础/文档注释
  9. FFmpeg_note
  10. 余额宝技术架构及演进------阅读