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


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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
Javascript 圆角div的实现代码
Oct 15 Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
javascript cookies 设置、读取、删除实例代码
Apr 12 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
Chrome扩展页面动态绑定JS事件提示错误
Feb 11 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
js友好的时间返回函数
Aug 24 Javascript
Javascript中字符串相关常用的使用方法总结
Mar 13 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 Javascript
vue中v-for加载本地静态图片方法
Mar 03 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 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 多进程 解决难题
2009/06/22 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
node.js实现的装饰者模式示例
2017/09/06 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
Django实现文件上传和下载功能
2019/10/06 Python
golang/python实现归并排序实例代码
2020/08/30 Python
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
介绍一下Linux文件的记录形式
2012/04/18 面试题
《欢乐的泼水节》教学反思
2014/04/22 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
骨干教师申报材料
2014/12/17 职场文书
经费申请报告
2015/05/15 职场文书
新闻通讯稿模板
2015/07/22 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL