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


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 xml为数据源的下拉框控件
Jul 07 Javascript
javascript 去字符串空格终极版(支持utf8)
Nov 14 Javascript
网页图片延时加载的js代码
Apr 22 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
Dec 06 Javascript
jQuery实现的图片分组切换焦点图插件
Jan 06 Javascript
讲解JavaScript中for...in语句的使用方法
Jun 03 Javascript
手机Web APP如何实现分享多平台功能
Aug 19 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
基于jquery二维码生成插件qrcode
Jan 07 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
js实现一个简易计算器
Mar 30 Javascript
JavaScript原生数组函数实例汇总
Oct 14 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
桌面中心(一)创建数据库
2006/10/09 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php实现webservice实例
2014/11/06 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
AngularJS基础知识
2014/12/21 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
在Python中使用Mako模版库的简单教程
2015/04/08 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python爬虫工程师面试问题总结
2018/03/22 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
业务员薪酬管理制度
2014/01/15 职场文书
协议书的格式
2014/04/23 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
素质教育标语
2014/06/27 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技