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


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的抓取博客园首页RSS的代码
Dec 01 Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 Javascript
jQuery中parents()和parent()的区别分析
Oct 28 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
微信小程序scroll-x失效的完美解决方法
Jul 18 Javascript
vue实力踩坑之push当前页无效
Apr 10 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
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
php防止用户重复提交表单
2015/11/02 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
python读取Excel表格文件的方法
2019/09/02 Python
tensorboard显示空白的解决
2020/02/15 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
电子专业推荐信范文
2013/11/18 职场文书
应届行政管理专业个人自我评价
2013/12/28 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
国庆宣传标语
2014/06/30 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
MySQL注入基础练习
2021/05/30 MySQL