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


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 相关文章推荐
javascript CSS画图之基础篇
Jul 29 Javascript
JavaScript获取DOM元素的11种方法总结
Apr 25 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
详解jQuery中的元素的属性和相关操作
Aug 14 Javascript
jquery实现的淡入淡出下拉菜单效果
Aug 25 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
bootstrap组件之导航组件使用方法
Jan 19 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
js实现简单的轮播图效果
Dec 13 Javascript
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
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
Python函数和模块的使用总结
2019/05/20 Python
django为Form生成的label标签添加class方式
2020/05/20 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
美国牛仔品牌:True Religion
2018/11/16 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
学校岗位设置方案
2014/01/16 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
活动总结的格式
2014/05/07 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
公务员政审个人总结
2015/02/12 职场文书
药店营业员岗位职责
2015/04/14 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS