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


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 相关文章推荐
学习js所必须要知道的一些
Mar 07 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
Oct 21 Javascript
动态加载js的方法汇总
Feb 13 Javascript
jQuery实现表格展开与折叠的方法
May 04 Javascript
针对初学者的jQuery入门指南
Aug 15 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
Nov 03 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
Jun 10 Javascript
AngularJS ng-repeat数组有重复值的解决方法
Oct 23 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
Jan 04 Javascript
JavaScript体验异步更好的解决办法
Jan 08 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
js+html+css实现手动轮播和自动轮播
Dec 30 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与java通过socket通信的实现代码
2013/10/21 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
jquery制作LED 时钟特效
2015/02/01 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
python模拟鼠标拖动操作的方法
2015/03/11 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Python实现多线程抓取妹子图
2015/08/08 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
python逆序打印各位数字的方法
2018/06/25 Python
python3爬取数据至mysql的方法
2018/06/26 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
Python中bisect的使用方法
2019/12/31 Python
python打包多类型文件的操作方法
2020/09/21 Python
自荐信格式技巧有哪些呢
2013/11/19 职场文书
基层干部十八大感言
2014/01/19 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
公司财务部岗位职责
2015/04/14 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL