微信小程序实现实时圆形进度条的方法示例


Posted in Javascript onFebruary 24, 2017

前言

最近工作中为了做一个录制按钮,研究了下小程序的实时圆形进度条实现,下面这篇文章就来给大家详细的介绍了实现的方法示例,废话不多说,先来看看效果图吧。

效果图如下

微信小程序实现实时圆形进度条的方法示例
初始状态

微信小程序实现实时圆形进度条的方法示例

点击中间按钮开始绘制

微信小程序实现实时圆形进度条的方法示例

绘制过程

微信小程序实现实时圆形进度条的方法示例

绘制结束

实现思路

建立两个canvas标签,先绘制底层的浅灰色圆圈背景,再绘制上层的红色进度条。

WXML代码

<view class="wrap">
 <view class="circle-box">
 <canvas class="circle" style="width:200px; height:200px;" canvas-id="canvasArcCir">
 </canvas>
 <canvas class="circle" style="z-index: -5; width:200px; height:200px;" canvas-id="canvasCircle">
 </canvas>
 <view class="draw_btn" bindtap="drawCircle">开始动态绘制</view>
 </view>
</view>

WXSS代码

特别注意:底层的canvas最好使用

z-index:-5;放置于底层

page {
 width: 100%;
 height: 100%;
 background-color: #fff;
}

.circle-box {
 text-align: center;
 margin-top: 10vw;
}

.circle {
 position: absolute;
 left: 0;
 right: 0;
 margin: auto;
}

.draw_btn {
 width: 35vw;
 position: absolute;
 top: 33vw;
 right: 0;
 left: 0;
 margin: auto;
 border: 1px #000 solid;
 border-radius: 5vw;
}

JS代码

//获取应用实例
var app = getApp()

var interval;
var varName;
var ctx = wx.createCanvasContext('canvasArcCir');

Page({
 data: {
 },
 drawCircle: function () {
 clearInterval(varName);
 function drawArc(s, e) {
 ctx.setFillStyle('white');
 ctx.clearRect(0, 0, 200, 200);
 ctx.draw();
 var x = 100, y = 100, radius = 96;
 ctx.setLineWidth(5);
 ctx.setStrokeStyle('#d81e06');
 ctx.setLineCap('round');
 ctx.beginPath();
 ctx.arc(x, y, radius, s, e, false);
 ctx.stroke()
 ctx.draw()
 }
 var step = 1, startAngle = 1.5 * Math.PI, endAngle = 0;
 var animation_interval = 1000, n = 60;
 var animation = function () {
 if (step <= n) {
 endAngle = step * 2 * Math.PI / n + 1.5 * Math.PI;
 drawArc(startAngle, endAngle);
 step++;
 } else {
 clearInterval(varName);
 }
 };
 varName = setInterval(animation, animation_interval);
 },
 onReady: function () {
 //创建并返回绘图上下文context对象。
 var cxt_arc = wx.createCanvasContext('canvasCircle');
 cxt_arc.setLineWidth(6);
 cxt_arc.setStrokeStyle('#eaeaea');
 cxt_arc.setLineCap('round');
 cxt_arc.beginPath();
 cxt_arc.arc(100, 100, 96, 0, 2 * Math.PI, false);
 cxt_arc.stroke();
 cxt_arc.draw();
 },
 onLoad: function (options) {

 }
})

注意的要点

1、关于小程序canvas绘制,请观看微信小程序官方文档绘制

2、开始绘制的路径可以根据 JS代码中的变量startAngle 来选择从哪里开始绘制

微信小程序实现实时圆形进度条的方法示例

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用微信小程序能带来一定的帮助,最后有什么问题可以留言,大家一起讨论共同进步。

Javascript 相关文章推荐
学习从实践开始之jQuery插件开发 对话框插件开发
Apr 26 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
javascript列表框操作函数集合汇总
Nov 28 Javascript
JavaScript实现在标题栏上显示当前日期的方法
Mar 19 Javascript
jQuery根据元素值删除数组元素的方法
Jun 24 Javascript
Uploadify上传文件方法
Mar 16 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
May 27 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 Javascript
解决Layui数据表格的宽高问题
Sep 28 Javascript
vue elementUI表格控制对应列
Apr 13 Vue.js
JavaScript中三种常见的排序方法
Feb 24 #Javascript
Angular2 Service实现简单音乐播放器服务
Feb 24 #Javascript
Bootstrap3多级下拉菜单
Feb 24 #Javascript
使用原生的javascript来实现轮播图
Feb 24 #Javascript
从零学习node.js之mysql数据库的操作(五)
Feb 24 #Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 #Javascript
JavaScript中值类型和引用类型的区别
Feb 23 #Javascript
You might like
UCenter Home二次开发指南
2009/05/28 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
2016/05/30 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
python实现电子词典
2020/04/23 Python
python字符串排序方法
2014/08/29 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
聊聊python中的异常嵌套
2020/09/01 Python
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
人力资源管理毕业求职信
2014/08/05 职场文书
工作收入证明范本
2015/06/12 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
Python中的变量与常量
2021/11/11 Python
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python