微信小程序自定义组件实现环形进度条


Posted in Javascript onNovember 17, 2020

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

微信小程序自定义组件官方教程

环形进度条的组件已经放在github上

环形进度条效果图

微信小程序自定义组件实现环形进度条

创建步骤

1、在根目录创建名为components的文件夹,用来放需要引用的自定义组件。
2、创建名为canvas-ring的文件夹,用来放环形进度条自定义组件。
3、鼠标指着canvas-ring的文件夹 鼠标右键 “新建 Component” 取名canvas-ring。

结构图:

微信小程序自定义组件实现环形进度条

环形进度条组件的代码

canvas-ring.json

{
 "component": true, //这一定要写成true
 "usingComponents": {} //可以引入其他自定义组件
}

canvas-ring.wxml

<canvas style="width:{{canvasWidth}}px;height:{{canvasWidth}}px;" canvas-id="circleBar">
 <cover-view class="circle-bar-wrap" style="height:{{canvasWidth}}px;">
 <cover-view class="font">
 {{title}}
 </cover-view>
 <cover-view class="val" style="color: {{valueColor}}; margin-top:{{isMarginTop?'20':'0'}}rpx">
 {{value}} {{suffix}}
 </cover-view>
 </cover-view>
</canvas>
<slot></slot>

canvas-ring.wxss

.circle-bar-wrap{
 width: 100%;
 display: flex;
 flex-direction: column;
 justify-content: center;
 align-items: center;
 text-align: center;
 box-sizing: border-box;
 padding: 0 20%;
}
.circle-bar-wrap .font{
 max-height: 62rpx;
 font-size: 26rpx;
 overflow:hidden;
 text-overflow:ellipsis;
 display:-webkit-box;
 -webkit-box-orient:vertical;
 -webkit-line-clamp:2;
 white-space: normal;
}
.circle-bar-wrap .val{
 margin-top: 20rpx;
 font-size: 50rpx;
 height: 65rpx;
}

canvas-ring.js

var windWidth = wx.getSystemInfoSync().windowWidth;
Component({
 options: {
 multipleSlots: true // 在组件定义时的选项中启用多slot支持
 },
 /**
 * 组件的属性列表
 */
 properties: {
 //画布的宽度 默认占屏幕宽度的0.4倍
 canvasWidth: {
 type: Number,
 value: windWidth * 0.4
 },
 //线条宽度 默认10
 lineWidth: {
 type: Number,
 value: 10
 },
 //线条颜色 默认"#393"
 lineColor: {
 type: String,
 value: "#393"
 },
 //标题 默认“完成率”
 title: {
 type: String,
 value: "完成率"
 },
 //当前的值 默认45
 value: {
 type: Number,
 value: 45
 },
 //值的颜色 默认"#ff9c07"
 valueColor:{
 type: String,
 value: "#ff9c07"
 },
 //最大值 默认100
 maxValue: {
 type: Number,
 value: 100
 },
 //最小值 默认0
 minValue: {
 type: Number,
 value: 0
 },
 //当前值的后缀名
 suffix: {
 type: null,
 value: "%"
 },
 //从什么角度开始 0~360之间 (12点方向为0,18点方向为180,0点方向为360)
 startDegree: {
 type: Number,
 value: 0
 }

 },

 /**
 * 组件的初始数据
 */
 data: {
 canvasWidth: windWidth * 0.4,
 isMarginTop: true
 },

 /**
 * 组件的方法列表
 */
 methods: {
 showCanvasRing() {
 //去掉首位空格后如果标题为空,那么当前值的区域就没有margin-top值
 if (this.data.title.replace(/(^\s*)|(\s*$)/g, "").length == 0) {
 this.setData({
 isMarginTop: false
 })
 }
 //作画

 var ctx = wx.createCanvasContext("circleBar", this); //canvas组建封装,需要后加个this
 var circle_r = this.data.canvasWidth / 2; //画布的一半,用来找中心点和半径
 var startDegree = this.data.startDegree; //从什么角度开始
 var maxValue = this.data.maxValue; //最大值
 var minValue = this.data.minValue; //最小值
 var value = this.data.value; //当前的值
 var lineColor = this.data.lineColor; //线条颜色
 var lineWidth = this.data.lineWidth; //线条宽度
 var percent = 360 * ((value - minValue) / (maxValue - minValue)); //计算结果
 //定义起始点
 ctx.translate(circle_r, circle_r);
 //灰色圆弧
 ctx.beginPath();
 ctx.setStrokeStyle("#ebebeb");
 ctx.setLineWidth(lineWidth);
 ctx.arc(0, 0, circle_r - 10, 0, 2 * Math.PI, true);
 ctx.stroke();
 ctx.closePath();
 //有色彩的圆弧
 ctx.beginPath();
 ctx.setStrokeStyle(lineColor);
 ctx.setLineWidth(lineWidth);
 ctx.arc(0, 0, circle_r - 10, startDegree * Math.PI / 180 - 0.5 * Math.PI, percent * Math.PI / 180 + startDegree * Math.PI / 180 - 0.5 * Math.PI, false);
 ctx.stroke();
 ctx.closePath();
 ctx.draw();
 }
 }
})

使用环形进度条组件

index.json

{
 "usingComponents": {
 "canvas-ring": "/components/canvas-ring/canvas-ring"
 }
}

index.wxml

<canvas-ring id="canvasRing" value="{{c_val}}"></canvas-ring>

index.js

onReady: function() {
 var that = this;
 that.canvasRing = that.selectComponent("#canvasRing");
 that.canvasRing.showCanvasRing();
},

组件的属性介绍

微信小程序自定义组件实现环形进度条

环形进度条的组件已经放在github上

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascritp实现input输入框相关限制用法
Jun 29 Javascript
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
jQuery实现的立体文字渐变效果
May 17 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 Javascript
详解Vue webapp项目通过HBulider打包原生APP
Jun 29 Javascript
简单实现vue中的依赖收集与响应的方法
Feb 18 Javascript
JavaScript实现五子棋游戏的方法详解
Jul 08 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
jquery插件实现悬浮的菜单
Apr 24 jQuery
vue + typescript + 极验登录验证的实现方法
Jun 27 #Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
Jun 27 #Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
Jun 27 #Javascript
ES6 let和const定义变量与常量的应用实例分析
Jun 27 #Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
Jun 27 #Javascript
微信小程序实现form表单本地储存数据
Jun 27 #Javascript
ES6 class的应用实例分析
Jun 27 #Javascript
You might like
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
python实现爬取图书封面
2018/07/05 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
python爬虫实现中英翻译词典
2019/06/25 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
python将unicode和str互相转化的实现
2020/05/11 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
小结Python的反射机制
2020/09/28 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
工厂厂长岗位职责
2013/11/08 职场文书
员工晚婚的请假条
2014/02/08 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
防沙治沙典型材料
2014/05/07 职场文书
优秀护士事迹材料
2014/12/25 职场文书
个人专业技术总结
2015/03/05 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers